<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="slides_v1.html">Google Slides API</a> . <a href="slides_v1.presentations.html">presentations</a> . <a href="slides_v1.presentations.pages.html">pages</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(presentationId, pageObjectId, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the latest version of the specified page in the presentation.</p>
<p class="toc_element">
  <code><a href="#getThumbnail">getThumbnail(presentationId, pageObjectId, thumbnailProperties_mimeType=None, thumbnailProperties_thumbnailSize=None, x__xgafv=None)</a></code></p>
<p class="firstline">Generates a thumbnail of the latest version of the specified page in the</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="get">get(presentationId, pageObjectId, x__xgafv=None)</code>
  <pre>Gets the latest version of the specified page in the presentation.

Args:
  presentationId: string, The ID of the presentation to retrieve. (required)
  pageObjectId: string, The object ID of the page to retrieve. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A page in a presentation.
    "layoutProperties": { # The properties of Page are only # Layout specific properties. Only set if page_type = LAYOUT.
        # relevant for pages with page_type LAYOUT.
      "displayName": "A String", # The human readable name of the layout in the presentation's locale.
      "name": "A String", # The name of the layout.
      "masterObjectId": "A String", # The object ID of the master that this layout is based on.
    },
    "pageElements": [ # The page elements rendered on the page.
      { # A visual element rendered on a page.
        "wordArt": { # A PageElement kind representing # A word art page element.
            # word art.
          "renderedText": "A String", # The text rendered as word art.
        },
        "description": "A String", # The description of the page element. Combined with title to display alt
            # text.
        "objectId": "A String", # The object ID for this page element. Object IDs used by
            # google.apps.slides.v1.Page and
            # google.apps.slides.v1.PageElement share the same namespace.
        "title": "A String", # The title of the page element. Combined with description to display alt
            # text.
        "image": { # A PageElement kind representing an # An image page element.
            # image.
          "contentUrl": "A String", # An URL to an image with a default lifetime of 30 minutes.
              # This URL is tagged with the account of the requester. Anyone with the URL
              # effectively accesses the image as the original requester. Access to the
              # image may be lost if the presentation's sharing settings change.
          "imageProperties": { # The properties of the Image. # The properties of the image.
            "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "outlineFill": { # The fill of the outline. # The fill of the outline.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                      # That is, the final pixel color is defined by the equation:
                      #
                      #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                      #
                      # This means that a value of 1.0 corresponds to a solid color, whereas
                      # a value of 0.0 corresponds to a completely transparent color.
                },
              },
              "propertyState": "A String", # The outline property state.
                  #
                  # Updating the the outline on a page element will implicitly update this
                  # field to`RENDERED`, unless another value is specified in the same request.
                  # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                  # this case, any other outline fields set in the same request will be
                  # ignored.
              "dashStyle": "A String", # The dash style of the outline.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
            "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect. This property is read-only.
            "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                # This property is read-only.
              "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                  # stops.
                  #
                  # The colors in the gradient will replace the corresponding colors at
                  # the same position in the color palette and apply to the image. This
                  # property is read-only.
                { # A color and position in a gradient band.
                  "color": { # A themeable solid color value. # The color of the gradient stop.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                      # fully opaque.
                  "position": 3.14, # The relative position of the color stop in the gradient band measured
                      # in percentage. The value should be in the interval [0.0, 1.0].
                },
              ],
              "name": "A String", # The name of the recolor effect.
                  #
                  # The name is determined from the `recolor_stops` by matching the gradient
                  # against the colors in the page's current color scheme. This property is
                  # read-only.
            },
            "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                # This property is read-only.
            "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                # This property is read-only.
                # Image.
                #
                # The crop properties is represented by the offsets of four edges which define
                # a crop rectangle. The offsets are measured in percentage from the
                # corresponding edges of the object's original bounding rectangle towards
                # inside, relative to the object's original dimensions.
                #
                # - If the offset is in the interval (0, 1), the corresponding edge of crop
                # rectangle is positioned inside of the object's original bounding rectangle.
                # - If the offset is negative or greater than 1, the corresponding edge of crop
                # rectangle is positioned outside of the object's original bounding rectangle.
                # - If the left edge of the crop rectangle is on the right side of its right
                # edge, the object will be flipped horizontally.
                # - If the top edge of the crop rectangle is below its bottom edge, the object
                # will be flipped vertically.
                # - If all offsets and rotation angle is 0, the object is not cropped.
                #
                # After cropping, the content in the crop rectangle will be stretched to fit
                # its container.
              "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                  # the right of the original bounding rectangle left edge, relative to the
                  # object's original width.
              "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                  # Rotation angle is applied after the offset.
              "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                  # to the left of the original bounding rectangle right edge, relative to the
                  # object's original width.
              "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                  # above the original bounding rectangle bottom edge, relative to the object's
                  # original height.
              "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                  # below the original bounding rectangle top edge, relative to the object's
                  # original height.
            },
            "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                # is read-only.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "color": { # A themeable solid color value. # The shadow color value.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                  # relative to the alignment position.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "propertyState": "A String", # The shadow property state.
                  #
                  # Updating the the shadow on a page element will implicitly update this field
                  # to `RENDERED`, unless another value is specified in the same request. To
                  # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                  # case, any other shadow fields set in the same request will be ignored.
              "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                  # shadow becomes.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
              "type": "A String", # The type of the shadow.
              "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                  # scale and skew of the shadow.
              "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
            },
            "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect. This property is read-only.
          },
        },
        "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # The transform of the page element.
            # to transform source coordinates (x,y) into destination coordinates (x', y')
            # according to:
            #
            #       x'  x  =   shear_y  scale_y  translate_y
            #       1  [ 1 ]
            #
            # After transformation,
            #
            #      x' = scale_x * x + shear_x * y + translate_x;
            #      y' = scale_y * y + shear_y * x + translate_y;
            #
            # This message is therefore composed of these six matrix elements.
          "translateX": 3.14, # The X coordinate translation element.
          "translateY": 3.14, # The Y coordinate translation element.
          "scaleX": 3.14, # The X coordinate scaling element.
          "scaleY": 3.14, # The Y coordinate scaling element.
          "shearY": 3.14, # The Y coordinate shearing element.
          "shearX": 3.14, # The X coordinate shearing element.
          "unit": "A String", # The units for translate elements.
        },
        "shape": { # A PageElement kind representing a # A generic shape.
            # generic shape that does not have a more specific classification.
          "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the shape.
              # text box or rectangle) or a table cell in a page.
            "lists": { # The bulleted lists contained in this text, keyed by list ID.
              "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                  # associated with a list. A paragraph that is part of a list has an implicit
                  # reference to that list's ID.
                "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                    # level. A list has at most nine levels of nesting, so the possible values
                    # for the keys of this map are 0 through 8, inclusive.
                  "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                      # level of nesting.
                    "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                        #
                        # If this text is contained in a shape with a parent placeholder, then these text styles may be
                        # inherited from the parent. Which text styles are inherited depend on the
                        # nesting level of lists:
                        #
                        # * A text run in a paragraph that is not in a list will inherit its text style
                        #   from the the newline character in the paragraph at the 0 nesting level of
                        #   the list inside the parent placeholder.
                        # * A text run in a paragraph that is in a list will inherit its text style
                        #   from the newline character in the paragraph at its corresponding nesting
                        #   level of the list inside the parent placeholder.
                        #
                        # Inherited text styles are represented as unset fields in this message. If
                        # text is contained in a shape without a parent placeholder, unsetting these
                        # fields will revert the style to a value matching the defaults in the Slides
                        # editor.
                      "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "bold": True or False, # Whether or not the text is rendered as bold.
                      "baselineOffset": "A String", # The text's vertical offset from its normal position.
                          #
                          # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                          # rendered in a smaller font size, computed based on the `font_size` field.
                          # The `font_size` itself is not affected by changes in this field.
                      "strikethrough": True or False, # Whether or not the text is struck through.
                      "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                          #
                          # This field is an extension of `font_family` meant to support explicit font
                          # weights without breaking backwards compatibility. As such, when reading the
                          # style of a range of text, the value of `weighted_font_family#font_family`
                          # will always be equal to that of `font_family`. However, when writing, if
                          # both fields are included in the field mask (either explicitly or through
                          # the wildcard `"*"`), their values are reconciled as follows:
                          #
                          # * If `font_family` is set and `weighted_font_family` is not, the value of
                          #   `font_family` is applied with weight `400` ("normal").
                          # * If both fields are set, the value of `font_family` must match that of
                          #   `weighted_font_family#font_family`. If so, the font family and weight of
                          #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                          #   returned.
                          # * If `weighted_font_family` is set and `font_family` is not, the font
                          #   family and weight of `weighted_font_family` is applied.
                          # * If neither field is set, the font family and weight of the text inherit
                          #   from the parent. Note that these properties cannot inherit separately
                          #   from each other.
                          #
                          # If an update request specifies values for both `weighted_font_family` and
                          # `bold`, the `weighted_font_family` is applied first, then `bold`.
                          #
                          # If `weighted_font_family#weight` is not set, it defaults to `400`.
                          #
                          # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                          # must also be set with a non-empty value. Otherwise, a 400 bad request error
                          # is returned.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        "weight": 42, # The rendered weight of the text. This field can have any value that is a
                            # multiple of `100` between `100` and `900`, inclusive. This range
                            # corresponds to the numerical values described in the CSS 2.1
                            # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                            # with non-numerical values disallowed. Weights greater than or equal to
                            # `700` are considered bold, and weights less than `700`are not bold. The
                            # default value is `400` ("normal").
                      },
                      "smallCaps": True or False, # Whether or not the text is in small capital letters.
                      "fontFamily": "A String", # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Slides or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                          #
                          # Some fonts can affect the weight of the text. If an update request
                          # specifies values for both `font_family` and `bold`, the explicitly-set
                          # `bold` value is used.
                      "italic": True or False, # Whether or not the text is italicized.
                      "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                          # are not inherited from parent text.
                          #
                          # Changing the link in an update request causes some other changes to the
                          # text style of the range:
                          #
                          # * When setting a link, the text foreground color will be set to
                          #   ThemeColorType.HYPERLINK and the text will
                          #   be underlined. If these fields are modified in the same
                          #   request, those values will be used instead of the link defaults.
                          # * Setting a link on a text range that overlaps with an existing link will
                          #   also update the existing link to point to the new URL.
                          # * Links are not settable on newline characters. As a result, setting a link
                          #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                          #   will separate the newline character(s) into their own text runs. The
                          #   link will be applied separately to the runs before and after the newline.
                          # * Removing a link will update the text style of the range to match the
                          #   style of the preceding text (or the default text styles if the preceding
                          #   text is another link) unless different styles are being set in the same
                          #   request.
                        "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                        "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                            # in the presentation. There may not be a slide at this index.
                        "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                            # presentation with this ID. A page with this ID may not exist.
                        "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                            # addressed by its position.
                      },
                      "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                          # points.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "underline": True or False, # Whether or not the text is underlined.
                    },
                  },
                },
                "listId": "A String", # The ID of the list.
              },
            },
            "textElements": [ # The text contents broken down into its component parts, including styling
                # information. This property is read-only.
              { # A TextElement describes the content of a range of indices in the text content
                  # of a Shape or TableCell.
                "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                    # replaced with content that can change over time.
                  "content": "A String", # The rendered content of this auto text, if available.
                  "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                      #
                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                      # inherited from the parent. Which text styles are inherited depend on the
                      # nesting level of lists:
                      #
                      # * A text run in a paragraph that is not in a list will inherit its text style
                      #   from the the newline character in the paragraph at the 0 nesting level of
                      #   the list inside the parent placeholder.
                      # * A text run in a paragraph that is in a list will inherit its text style
                      #   from the newline character in the paragraph at its corresponding nesting
                      #   level of the list inside the parent placeholder.
                      #
                      # Inherited text styles are represented as unset fields in this message. If
                      # text is contained in a shape without a parent placeholder, unsetting these
                      # fields will revert the style to a value matching the defaults in the Slides
                      # editor.
                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                        # transparent, depending on if the `opaque_color` field in it is set.
                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    "bold": True or False, # Whether or not the text is rendered as bold.
                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                        #
                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                        # rendered in a smaller font size, computed based on the `font_size` field.
                        # The `font_size` itself is not affected by changes in this field.
                    "strikethrough": True or False, # Whether or not the text is struck through.
                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                        #
                        # This field is an extension of `font_family` meant to support explicit font
                        # weights without breaking backwards compatibility. As such, when reading the
                        # style of a range of text, the value of `weighted_font_family#font_family`
                        # will always be equal to that of `font_family`. However, when writing, if
                        # both fields are included in the field mask (either explicitly or through
                        # the wildcard `"*"`), their values are reconciled as follows:
                        #
                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                        #   `font_family` is applied with weight `400` ("normal").
                        # * If both fields are set, the value of `font_family` must match that of
                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                        #   returned.
                        # * If `weighted_font_family` is set and `font_family` is not, the font
                        #   family and weight of `weighted_font_family` is applied.
                        # * If neither field is set, the font family and weight of the text inherit
                        #   from the parent. Note that these properties cannot inherit separately
                        #   from each other.
                        #
                        # If an update request specifies values for both `weighted_font_family` and
                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                        #
                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                        #
                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                        # is returned.
                      "fontFamily": "A String", # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Slides or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                          # multiple of `100` between `100` and `900`, inclusive. This range
                          # corresponds to the numerical values described in the CSS 2.1
                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                          # with non-numerical values disallowed. Weights greater than or equal to
                          # `700` are considered bold, and weights less than `700`are not bold. The
                          # default value is `400` ("normal").
                    },
                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                    "fontFamily": "A String", # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Slides or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                        #
                        # Some fonts can affect the weight of the text. If an update request
                        # specifies values for both `font_family` and `bold`, the explicitly-set
                        # `bold` value is used.
                    "italic": True or False, # Whether or not the text is italicized.
                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                        # are not inherited from parent text.
                        #
                        # Changing the link in an update request causes some other changes to the
                        # text style of the range:
                        #
                        # * When setting a link, the text foreground color will be set to
                        #   ThemeColorType.HYPERLINK and the text will
                        #   be underlined. If these fields are modified in the same
                        #   request, those values will be used instead of the link defaults.
                        # * Setting a link on a text range that overlaps with an existing link will
                        #   also update the existing link to point to the new URL.
                        # * Links are not settable on newline characters. As a result, setting a link
                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                        #   will separate the newline character(s) into their own text runs. The
                        #   link will be applied separately to the runs before and after the newline.
                        # * Removing a link will update the text style of the range to match the
                        #   style of the preceding text (or the default text styles if the preceding
                        #   text is another link) unless different styles are being set in the same
                        #   request.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                        # transparent, depending on if the `opaque_color` field in it is set.
                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                        # points.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "underline": True or False, # Whether or not the text is underlined.
                  },
                  "type": "A String", # The type of this auto text.
                },
                "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                    # units.
                "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                    #
                    # The `start_index` and `end_index` of this TextElement represent the
                    # range of the paragraph. Other TextElements with an index range contained
                    # inside this paragraph's range are considered to be part of this
                    # paragraph. The range of indices of two separate paragraphs will never
                    # overlap.
                  "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                      #
                      # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                      # inherited from the parent. Which paragraph styles are inherited depend on the
                      # nesting level of lists:
                      #
                      # * A paragraph not in a list will inherit its paragraph style from the
                      #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                      # * A paragraph in a list will inherit its paragraph style from the paragraph
                      #   at its corresponding nesting level of the list inside the parent
                      #   placeholder.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                    "spacingMode": "A String", # The spacing mode for the paragraph.
                    "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # text direction is not inherited.
                    "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                        # inherited from the parent.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                        # is represented as 100.0. If unset, the value is inherited from the parent.
                    "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current text direction. If unset, the
                        # value is inherited from the parent.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                        # inherited from the parent.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current text direction. If unset, the
                        # value is inherited from the parent.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                        # If unset, the value is inherited from the parent.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "alignment": "A String", # The text alignment for this paragraph.
                  },
                  "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                      # belong to a list.
                    "nestingLevel": 42, # The nesting level of this paragraph in the list.
                    "listId": "A String", # The ID of the list this paragraph belongs to.
                    "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                        #
                        # If this text is contained in a shape with a parent placeholder, then these text styles may be
                        # inherited from the parent. Which text styles are inherited depend on the
                        # nesting level of lists:
                        #
                        # * A text run in a paragraph that is not in a list will inherit its text style
                        #   from the the newline character in the paragraph at the 0 nesting level of
                        #   the list inside the parent placeholder.
                        # * A text run in a paragraph that is in a list will inherit its text style
                        #   from the newline character in the paragraph at its corresponding nesting
                        #   level of the list inside the parent placeholder.
                        #
                        # Inherited text styles are represented as unset fields in this message. If
                        # text is contained in a shape without a parent placeholder, unsetting these
                        # fields will revert the style to a value matching the defaults in the Slides
                        # editor.
                      "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "bold": True or False, # Whether or not the text is rendered as bold.
                      "baselineOffset": "A String", # The text's vertical offset from its normal position.
                          #
                          # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                          # rendered in a smaller font size, computed based on the `font_size` field.
                          # The `font_size` itself is not affected by changes in this field.
                      "strikethrough": True or False, # Whether or not the text is struck through.
                      "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                          #
                          # This field is an extension of `font_family` meant to support explicit font
                          # weights without breaking backwards compatibility. As such, when reading the
                          # style of a range of text, the value of `weighted_font_family#font_family`
                          # will always be equal to that of `font_family`. However, when writing, if
                          # both fields are included in the field mask (either explicitly or through
                          # the wildcard `"*"`), their values are reconciled as follows:
                          #
                          # * If `font_family` is set and `weighted_font_family` is not, the value of
                          #   `font_family` is applied with weight `400` ("normal").
                          # * If both fields are set, the value of `font_family` must match that of
                          #   `weighted_font_family#font_family`. If so, the font family and weight of
                          #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                          #   returned.
                          # * If `weighted_font_family` is set and `font_family` is not, the font
                          #   family and weight of `weighted_font_family` is applied.
                          # * If neither field is set, the font family and weight of the text inherit
                          #   from the parent. Note that these properties cannot inherit separately
                          #   from each other.
                          #
                          # If an update request specifies values for both `weighted_font_family` and
                          # `bold`, the `weighted_font_family` is applied first, then `bold`.
                          #
                          # If `weighted_font_family#weight` is not set, it defaults to `400`.
                          #
                          # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                          # must also be set with a non-empty value. Otherwise, a 400 bad request error
                          # is returned.
                        "fontFamily": "A String", # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Slides or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        "weight": 42, # The rendered weight of the text. This field can have any value that is a
                            # multiple of `100` between `100` and `900`, inclusive. This range
                            # corresponds to the numerical values described in the CSS 2.1
                            # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                            # with non-numerical values disallowed. Weights greater than or equal to
                            # `700` are considered bold, and weights less than `700`are not bold. The
                            # default value is `400` ("normal").
                      },
                      "smallCaps": True or False, # Whether or not the text is in small capital letters.
                      "fontFamily": "A String", # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Slides or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                          #
                          # Some fonts can affect the weight of the text. If an update request
                          # specifies values for both `font_family` and `bold`, the explicitly-set
                          # `bold` value is used.
                      "italic": True or False, # Whether or not the text is italicized.
                      "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                          # are not inherited from parent text.
                          #
                          # Changing the link in an update request causes some other changes to the
                          # text style of the range:
                          #
                          # * When setting a link, the text foreground color will be set to
                          #   ThemeColorType.HYPERLINK and the text will
                          #   be underlined. If these fields are modified in the same
                          #   request, those values will be used instead of the link defaults.
                          # * Setting a link on a text range that overlaps with an existing link will
                          #   also update the existing link to point to the new URL.
                          # * Links are not settable on newline characters. As a result, setting a link
                          #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                          #   will separate the newline character(s) into their own text runs. The
                          #   link will be applied separately to the runs before and after the newline.
                          # * Removing a link will update the text style of the range to match the
                          #   style of the preceding text (or the default text styles if the preceding
                          #   text is another link) unless different styles are being set in the same
                          #   request.
                        "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                        "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                            # in the presentation. There may not be a slide at this index.
                        "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                            # presentation with this ID. A page with this ID may not exist.
                        "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                            # addressed by its position.
                      },
                      "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                          # transparent, depending on if the `opaque_color` field in it is set.
                        "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                          # points.
                        "magnitude": 3.14, # The magnitude.
                        "unit": "A String", # The units for magnitude.
                      },
                      "underline": True or False, # Whether or not the text is underlined.
                    },
                    "glyph": "A String", # The rendered bullet glyph for this paragraph.
                  },
                },
                "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                    # in the run have the same TextStyle.
                    #
                    # The `start_index` and `end_index` of TextRuns will always be fully
                    # contained in the index range of a single `paragraph_marker` TextElement.
                    # In other words, a TextRun will never span multiple paragraphs.
                    # styling.
                  "content": "A String", # The text of this run.
                  "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                      #
                      # If this text is contained in a shape with a parent placeholder, then these text styles may be
                      # inherited from the parent. Which text styles are inherited depend on the
                      # nesting level of lists:
                      #
                      # * A text run in a paragraph that is not in a list will inherit its text style
                      #   from the the newline character in the paragraph at the 0 nesting level of
                      #   the list inside the parent placeholder.
                      # * A text run in a paragraph that is in a list will inherit its text style
                      #   from the newline character in the paragraph at its corresponding nesting
                      #   level of the list inside the parent placeholder.
                      #
                      # Inherited text styles are represented as unset fields in this message. If
                      # text is contained in a shape without a parent placeholder, unsetting these
                      # fields will revert the style to a value matching the defaults in the Slides
                      # editor.
                    "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                        # transparent, depending on if the `opaque_color` field in it is set.
                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    "bold": True or False, # Whether or not the text is rendered as bold.
                    "baselineOffset": "A String", # The text's vertical offset from its normal position.
                        #
                        # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                        # rendered in a smaller font size, computed based on the `font_size` field.
                        # The `font_size` itself is not affected by changes in this field.
                    "strikethrough": True or False, # Whether or not the text is struck through.
                    "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                        #
                        # This field is an extension of `font_family` meant to support explicit font
                        # weights without breaking backwards compatibility. As such, when reading the
                        # style of a range of text, the value of `weighted_font_family#font_family`
                        # will always be equal to that of `font_family`. However, when writing, if
                        # both fields are included in the field mask (either explicitly or through
                        # the wildcard `"*"`), their values are reconciled as follows:
                        #
                        # * If `font_family` is set and `weighted_font_family` is not, the value of
                        #   `font_family` is applied with weight `400` ("normal").
                        # * If both fields are set, the value of `font_family` must match that of
                        #   `weighted_font_family#font_family`. If so, the font family and weight of
                        #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                        #   returned.
                        # * If `weighted_font_family` is set and `font_family` is not, the font
                        #   family and weight of `weighted_font_family` is applied.
                        # * If neither field is set, the font family and weight of the text inherit
                        #   from the parent. Note that these properties cannot inherit separately
                        #   from each other.
                        #
                        # If an update request specifies values for both `weighted_font_family` and
                        # `bold`, the `weighted_font_family` is applied first, then `bold`.
                        #
                        # If `weighted_font_family#weight` is not set, it defaults to `400`.
                        #
                        # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                        # must also be set with a non-empty value. Otherwise, a 400 bad request error
                        # is returned.
                      "fontFamily": "A String", # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Slides or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      "weight": 42, # The rendered weight of the text. This field can have any value that is a
                          # multiple of `100` between `100` and `900`, inclusive. This range
                          # corresponds to the numerical values described in the CSS 2.1
                          # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                          # with non-numerical values disallowed. Weights greater than or equal to
                          # `700` are considered bold, and weights less than `700`are not bold. The
                          # default value is `400` ("normal").
                    },
                    "smallCaps": True or False, # Whether or not the text is in small capital letters.
                    "fontFamily": "A String", # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Slides or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                        #
                        # Some fonts can affect the weight of the text. If an update request
                        # specifies values for both `font_family` and `bold`, the explicitly-set
                        # `bold` value is used.
                    "italic": True or False, # Whether or not the text is italicized.
                    "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                        # are not inherited from parent text.
                        #
                        # Changing the link in an update request causes some other changes to the
                        # text style of the range:
                        #
                        # * When setting a link, the text foreground color will be set to
                        #   ThemeColorType.HYPERLINK and the text will
                        #   be underlined. If these fields are modified in the same
                        #   request, those values will be used instead of the link defaults.
                        # * Setting a link on a text range that overlaps with an existing link will
                        #   also update the existing link to point to the new URL.
                        # * Links are not settable on newline characters. As a result, setting a link
                        #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                        #   will separate the newline character(s) into their own text runs. The
                        #   link will be applied separately to the runs before and after the newline.
                        # * Removing a link will update the text style of the range to match the
                        #   style of the preceding text (or the default text styles if the preceding
                        #   text is another link) unless different styles are being set in the same
                        #   request.
                      "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                      "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                          # in the presentation. There may not be a slide at this index.
                      "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                          # presentation with this ID. A page with this ID may not exist.
                      "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                          # addressed by its position.
                    },
                    "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                        # transparent, depending on if the `opaque_color` field in it is set.
                      "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        "themeColor": "A String", # An opaque theme color.
                        "rgbColor": { # An RGB color. # An opaque RGB color.
                          "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                          "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                          "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                        # points.
                      "magnitude": 3.14, # The magnitude.
                      "unit": "A String", # The units for magnitude.
                    },
                    "underline": True or False, # Whether or not the text is underlined.
                  },
                },
              },
            ],
          },
          "shapeProperties": { # The properties of a Shape. # The properties of the shape.
              #
              # If the shape is a placeholder shape as determined by the
              # placeholder field, then these
              # properties may be inherited from a parent placeholder shape.
              # Determining the rendered value of the property depends on the corresponding
              # property_state field value.
            "shadow": { # The shadow properties of a page element. # The shadow properties of the shape. If unset, the shadow is inherited from
                # a parent placeholder if it exists. If the shape has no parent, then the
                # default shadow matches the defaults for new shapes created in the Slides
                # editor. This property is read-only.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "color": { # A themeable solid color value. # The shadow color value.
                "themeColor": "A String", # An opaque theme color.
                "rgbColor": { # An RGB color. # An opaque RGB color.
                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                },
              },
              "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                  # relative to the alignment position.
                  # to transform source coordinates (x,y) into destination coordinates (x', y')
                  # according to:
                  #
                  #       x'  x  =   shear_y  scale_y  translate_y
                  #       1  [ 1 ]
                  #
                  # After transformation,
                  #
                  #      x' = scale_x * x + shear_x * y + translate_x;
                  #      y' = scale_y * y + shear_y * x + translate_y;
                  #
                  # This message is therefore composed of these six matrix elements.
                "translateX": 3.14, # The X coordinate translation element.
                "translateY": 3.14, # The Y coordinate translation element.
                "scaleX": 3.14, # The X coordinate scaling element.
                "scaleY": 3.14, # The Y coordinate scaling element.
                "shearY": 3.14, # The Y coordinate shearing element.
                "shearX": 3.14, # The X coordinate shearing element.
                "unit": "A String", # The units for translate elements.
              },
              "propertyState": "A String", # The shadow property state.
                  #
                  # Updating the the shadow on a page element will implicitly update this field
                  # to `RENDERED`, unless another value is specified in the same request. To
                  # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                  # case, any other shadow fields set in the same request will be ignored.
              "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                  # shadow becomes.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
              "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
              "type": "A String", # The type of the shadow.
              "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                  # scale and skew of the shadow.
              "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
            },
            "shapeBackgroundFill": { # The shape background fill. # The background fill of the shape. If unset, the background fill is
                # inherited from a parent placeholder if it exists. If the shape has no
                # parent, then the default background fill depends on the shape type,
                # matching the defaults for new shapes created in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                    # That is, the final pixel color is defined by the equation:
                    #
                    #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                    #
                    # This means that a value of 1.0 corresponds to a solid color, whereas
                    # a value of 0.0 corresponds to a completely transparent color.
              },
              "propertyState": "A String", # The background fill property state.
                  #
                  # Updating the the fill on a shape will implicitly update this field to
                  # `RENDERED`, unless another value is specified in the same request. To
                  # have no fill on a shape, set this field to `NOT_RENDERED`. In this case,
                  # any other fill fields set in the same request will be ignored.
            },
            "link": { # A hypertext link. # The hyperlink destination of the shape. If unset, there is no link. Links
                # are not inherited from parent placeholders.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "outline": { # The outline of a PageElement. # The outline of the shape. If unset, the outline is inherited from a
                # parent placeholder if it exists. If the shape has no parent, then the
                # default outline depends on the shape type, matching the defaults for
                # new shapes created in the Slides editor.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "outlineFill": { # The fill of the outline. # The fill of the outline.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                      # That is, the final pixel color is defined by the equation:
                      #
                      #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                      #
                      # This means that a value of 1.0 corresponds to a solid color, whereas
                      # a value of 0.0 corresponds to a completely transparent color.
                },
              },
              "propertyState": "A String", # The outline property state.
                  #
                  # Updating the the outline on a page element will implicitly update this
                  # field to`RENDERED`, unless another value is specified in the same request.
                  # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                  # this case, any other outline fields set in the same request will be
                  # ignored.
              "dashStyle": "A String", # The dash style of the outline.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "placeholder": { # The placeholder information that uniquely identifies a placeholder shape. # Placeholders are shapes that are inherit from corresponding placeholders on
              # layouts and masters.
              #
              # If set, the shape is a placeholder shape and any inherited properties
              # can be resolved by looking at the parent placeholder identified by the
              # Placeholder.parent_object_id field.
            "parentObjectId": "A String", # The object ID of this shape's parent placeholder.
                # If unset, the parent placeholder shape does not exist, so the shape does
                # not inherit properties from any other shape.
            "index": 42, # The index of the placeholder. If the same placeholder types are present in
                # the same page, they would have different index values.
            "type": "A String", # The type of the placeholder.
          },
          "shapeType": "A String", # The type of the shape.
        },
        "sheetsChart": { # A PageElement kind representing # A linked chart embedded from Google Sheets. Unlinked charts are
            # represented as images.
            # a linked chart embedded from Google Sheets.
          "contentUrl": "A String", # The URL of an image of the embedded chart, with a default lifetime of 30
              # minutes. This URL is tagged with the account of the requester. Anyone with
              # the URL effectively accesses the image as the original requester. Access to
              # the image may be lost if the presentation's sharing settings change.
          "spreadsheetId": "A String", # The ID of the Google Sheets spreadsheet that contains the source chart.
          "sheetsChartProperties": { # The properties of the SheetsChart. # The properties of the Sheets chart.
            "chartImageProperties": { # The properties of the Image. # The properties of the embedded chart image.
              "outline": { # The outline of a PageElement. # The outline of the image. If not set, the the image has no outline.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "outlineFill": { # The fill of the outline. # The fill of the outline.
                  "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                      # specified color value.
                      #
                      # If any field is unset, its value may be inherited from a parent placeholder
                      # if it exists.
                    "color": { # A themeable solid color value. # The color value of the solid fill.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                        # That is, the final pixel color is defined by the equation:
                        #
                        #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                        #
                        # This means that a value of 1.0 corresponds to a solid color, whereas
                        # a value of 0.0 corresponds to a completely transparent color.
                  },
                },
                "propertyState": "A String", # The outline property state.
                    #
                    # Updating the the outline on a page element will implicitly update this
                    # field to`RENDERED`, unless another value is specified in the same request.
                    # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                    # this case, any other outline fields set in the same request will be
                    # ignored.
                "dashStyle": "A String", # The dash style of the outline.
                "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
              },
              "brightness": 3.14, # The brightness effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect. This property is read-only.
              "recolor": { # A recolor effect applied on an image. # The recolor effect of the image. If not set, the image is not recolored.
                  # This property is read-only.
                "recolorStops": [ # The recolor effect is represented by a gradient, which is a list of color
                    # stops.
                    #
                    # The colors in the gradient will replace the corresponding colors at
                    # the same position in the color palette and apply to the image. This
                    # property is read-only.
                  { # A color and position in a gradient band.
                    "color": { # A themeable solid color value. # The color of the gradient stop.
                      "themeColor": "A String", # An opaque theme color.
                      "rgbColor": { # An RGB color. # An opaque RGB color.
                        "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                        "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                        "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                      },
                    },
                    "alpha": 3.14, # The alpha value of this color in the gradient band. Defaults to 1.0,
                        # fully opaque.
                    "position": 3.14, # The relative position of the color stop in the gradient band measured
                        # in percentage. The value should be in the interval [0.0, 1.0].
                  },
                ],
                "name": "A String", # The name of the recolor effect.
                    #
                    # The name is determined from the `recolor_stops` by matching the gradient
                    # against the colors in the page's current color scheme. This property is
                    # read-only.
              },
              "link": { # A hypertext link. # The hyperlink destination of the image. If unset, there is no link.
                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                    # in the presentation. There may not be a slide at this index.
                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                    # presentation with this ID. A page with this ID may not exist.
                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                    # addressed by its position.
              },
              "transparency": 3.14, # The transparency effect of the image. The value should be in the interval
                  # [0.0, 1.0], where 0 means no effect and 1 means completely transparent.
                  # This property is read-only.
              "cropProperties": { # The crop properties of an object enclosed in a container. For example, an # The crop properties of the image. If not set, the image is not cropped.
                  # This property is read-only.
                  # Image.
                  #
                  # The crop properties is represented by the offsets of four edges which define
                  # a crop rectangle. The offsets are measured in percentage from the
                  # corresponding edges of the object's original bounding rectangle towards
                  # inside, relative to the object's original dimensions.
                  #
                  # - If the offset is in the interval (0, 1), the corresponding edge of crop
                  # rectangle is positioned inside of the object's original bounding rectangle.
                  # - If the offset is negative or greater than 1, the corresponding edge of crop
                  # rectangle is positioned outside of the object's original bounding rectangle.
                  # - If the left edge of the crop rectangle is on the right side of its right
                  # edge, the object will be flipped horizontally.
                  # - If the top edge of the crop rectangle is below its bottom edge, the object
                  # will be flipped vertically.
                  # - If all offsets and rotation angle is 0, the object is not cropped.
                  #
                  # After cropping, the content in the crop rectangle will be stretched to fit
                  # its container.
                "leftOffset": 3.14, # The offset specifies the left edge of the crop rectangle that is located to
                    # the right of the original bounding rectangle left edge, relative to the
                    # object's original width.
                "angle": 3.14, # The rotation angle of the crop window around its center, in radians.
                    # Rotation angle is applied after the offset.
                "rightOffset": 3.14, # The offset specifies the right edge of the crop rectangle that is located
                    # to the left of the original bounding rectangle right edge, relative to the
                    # object's original width.
                "bottomOffset": 3.14, # The offset specifies the bottom edge of the crop rectangle that is located
                    # above the original bounding rectangle bottom edge, relative to the object's
                    # original height.
                "topOffset": 3.14, # The offset specifies the top edge of the crop rectangle that is located
                    # below the original bounding rectangle top edge, relative to the object's
                    # original height.
              },
              "shadow": { # The shadow properties of a page element. # The shadow of the image. If not set, the image has no shadow. This property
                  # is read-only.
                  #
                  # If these fields are unset, they may be inherited from a parent placeholder
                  # if it exists. If there is no parent, the fields will default to the value
                  # used for new page elements created in the Slides editor, which may depend on
                  # the page element kind.
                "color": { # A themeable solid color value. # The shadow color value.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "transform": { # AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ] # Transform that encodes the translate, scale, and skew of the shadow,
                    # relative to the alignment position.
                    # to transform source coordinates (x,y) into destination coordinates (x', y')
                    # according to:
                    #
                    #       x'  x  =   shear_y  scale_y  translate_y
                    #       1  [ 1 ]
                    #
                    # After transformation,
                    #
                    #      x' = scale_x * x + shear_x * y + translate_x;
                    #      y' = scale_y * y + shear_y * x + translate_y;
                    #
                    # This message is therefore composed of these six matrix elements.
                  "translateX": 3.14, # The X coordinate translation element.
                  "translateY": 3.14, # The Y coordinate translation element.
                  "scaleX": 3.14, # The X coordinate scaling element.
                  "scaleY": 3.14, # The Y coordinate scaling element.
                  "shearY": 3.14, # The Y coordinate shearing element.
                  "shearX": 3.14, # The X coordinate shearing element.
                  "unit": "A String", # The units for translate elements.
                },
                "propertyState": "A String", # The shadow property state.
                    #
                    # Updating the the shadow on a page element will implicitly update this field
                    # to `RENDERED`, unless another value is specified in the same request. To
                    # have no shadow on a page element, set this field to `NOT_RENDERED`. In this
                    # case, any other shadow fields set in the same request will be ignored.
                "blurRadius": { # A magnitude in a single direction in the specified units. # The radius of the shadow blur. The larger the radius, the more diffuse the
                    # shadow becomes.
                  "magnitude": 3.14, # The magnitude.
                  "unit": "A String", # The units for magnitude.
                },
                "alpha": 3.14, # The alpha of the shadow's color, from 0.0 to 1.0.
                "type": "A String", # The type of the shadow.
                "alignment": "A String", # The alignment point of the shadow, that sets the origin for translate,
                    # scale and skew of the shadow.
                "rotateWithShape": True or False, # Whether the shadow should rotate with the shape.
              },
              "contrast": 3.14, # The contrast effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect. This property is read-only.
            },
          },
          "chartId": 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
              # embedded.
        },
        "video": { # A PageElement kind representing a # A video page element.
            # video.
          "url": "A String", # An URL to a video. The URL is valid as long as the source video
              # exists and sharing settings do not change.
          "videoProperties": { # The properties of the Video. # The properties of the video.
            "outline": { # The outline of a PageElement. # The outline of the video. The default outline matches the defaults for new
                # videos created in the Slides editor.
                #
                # If these fields are unset, they may be inherited from a parent placeholder
                # if it exists. If there is no parent, the fields will default to the value
                # used for new page elements created in the Slides editor, which may depend on
                # the page element kind.
              "outlineFill": { # The fill of the outline. # The fill of the outline.
                "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                    # specified color value.
                    #
                    # If any field is unset, its value may be inherited from a parent placeholder
                    # if it exists.
                  "color": { # A themeable solid color value. # The color value of the solid fill.
                    "themeColor": "A String", # An opaque theme color.
                    "rgbColor": { # An RGB color. # An opaque RGB color.
                      "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                      "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                      "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                    },
                  },
                  "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                      # That is, the final pixel color is defined by the equation:
                      #
                      #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                      #
                      # This means that a value of 1.0 corresponds to a solid color, whereas
                      # a value of 0.0 corresponds to a completely transparent color.
                },
              },
              "propertyState": "A String", # The outline property state.
                  #
                  # Updating the the outline on a page element will implicitly update this
                  # field to`RENDERED`, unless another value is specified in the same request.
                  # To have no outline on a page element, set this field to `NOT_RENDERED`. In
                  # this case, any other outline fields set in the same request will be
                  # ignored.
              "dashStyle": "A String", # The dash style of the outline.
              "weight": { # A magnitude in a single direction in the specified units. # The thickness of the outline.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          },
          "id": "A String", # The video source's unique identifier for this video.
          "source": "A String", # The video source.
        },
        "elementGroup": { # A PageElement kind representing a # A collection of page elements joined as a single unit.
            # joined collection of PageElements.
          "children": [ # The collection of elements in the group. The minimum size of a group is 2.
            # Object with schema name: PageElement
          ],
        },
        "table": { # A PageElement kind representing a # A table page element.
            # table.
          "tableColumns": [ # Properties of each column.
            { # Properties of each column in a table.
              "columnWidth": { # A magnitude in a single direction in the specified units. # Width of a column.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          ],
          "tableRows": [ # Properties and contents of each row.
              #
              # Cells that span multiple rows are contained in only one of these rows and
              # have a row_span greater
              # than 1.
            { # Properties and contents of each row in a table.
              "tableCells": [ # Properties and contents of each cell.
                  #
                  # Cells that span multiple columns are represented only once with a
                  # column_span greater
                  # than 1. As a result, the length of this collection does not always match
                  # the number of columns of the entire table.
                { # Properties and contents of each table cell.
                  "text": { # The general text content. The text must reside in a compatible shape (e.g. # The text content of the cell.
                      # text box or rectangle) or a table cell in a page.
                    "lists": { # The bulleted lists contained in this text, keyed by list ID.
                      "a_key": { # A List describes the look and feel of bullets belonging to paragraphs
                          # associated with a list. A paragraph that is part of a list has an implicit
                          # reference to that list's ID.
                        "nestingLevel": { # A map of nesting levels to the properties of bullets at the associated
                            # level. A list has at most nine levels of nesting, so the possible values
                            # for the keys of this map are 0 through 8, inclusive.
                          "a_key": { # Contains properties describing the look and feel of a list bullet at a given
                              # level of nesting.
                            "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The style of a bullet at this level of nesting.
                                #
                                # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                # inherited from the parent. Which text styles are inherited depend on the
                                # nesting level of lists:
                                #
                                # * A text run in a paragraph that is not in a list will inherit its text style
                                #   from the the newline character in the paragraph at the 0 nesting level of
                                #   the list inside the parent placeholder.
                                # * A text run in a paragraph that is in a list will inherit its text style
                                #   from the newline character in the paragraph at its corresponding nesting
                                #   level of the list inside the parent placeholder.
                                #
                                # Inherited text styles are represented as unset fields in this message. If
                                # text is contained in a shape without a parent placeholder, unsetting these
                                # fields will revert the style to a value matching the defaults in the Slides
                                # editor.
                              "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "bold": True or False, # Whether or not the text is rendered as bold.
                              "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                  #
                                  # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                  # rendered in a smaller font size, computed based on the `font_size` field.
                                  # The `font_size` itself is not affected by changes in this field.
                              "strikethrough": True or False, # Whether or not the text is struck through.
                              "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                  #
                                  # This field is an extension of `font_family` meant to support explicit font
                                  # weights without breaking backwards compatibility. As such, when reading the
                                  # style of a range of text, the value of `weighted_font_family#font_family`
                                  # will always be equal to that of `font_family`. However, when writing, if
                                  # both fields are included in the field mask (either explicitly or through
                                  # the wildcard `"*"`), their values are reconciled as follows:
                                  #
                                  # * If `font_family` is set and `weighted_font_family` is not, the value of
                                  #   `font_family` is applied with weight `400` ("normal").
                                  # * If both fields are set, the value of `font_family` must match that of
                                  #   `weighted_font_family#font_family`. If so, the font family and weight of
                                  #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                  #   returned.
                                  # * If `weighted_font_family` is set and `font_family` is not, the font
                                  #   family and weight of `weighted_font_family` is applied.
                                  # * If neither field is set, the font family and weight of the text inherit
                                  #   from the parent. Note that these properties cannot inherit separately
                                  #   from each other.
                                  #
                                  # If an update request specifies values for both `weighted_font_family` and
                                  # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                  #
                                  # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                  #
                                  # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                  # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                  # is returned.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                    # multiple of `100` between `100` and `900`, inclusive. This range
                                    # corresponds to the numerical values described in the CSS 2.1
                                    # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                    # with non-numerical values disallowed. Weights greater than or equal to
                                    # `700` are considered bold, and weights less than `700`are not bold. The
                                    # default value is `400` ("normal").
                              },
                              "smallCaps": True or False, # Whether or not the text is in small capital letters.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                                  #
                                  # Some fonts can affect the weight of the text. If an update request
                                  # specifies values for both `font_family` and `bold`, the explicitly-set
                                  # `bold` value is used.
                              "italic": True or False, # Whether or not the text is italicized.
                              "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                  # are not inherited from parent text.
                                  #
                                  # Changing the link in an update request causes some other changes to the
                                  # text style of the range:
                                  #
                                  # * When setting a link, the text foreground color will be set to
                                  #   ThemeColorType.HYPERLINK and the text will
                                  #   be underlined. If these fields are modified in the same
                                  #   request, those values will be used instead of the link defaults.
                                  # * Setting a link on a text range that overlaps with an existing link will
                                  #   also update the existing link to point to the new URL.
                                  # * Links are not settable on newline characters. As a result, setting a link
                                  #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                  #   will separate the newline character(s) into their own text runs. The
                                  #   link will be applied separately to the runs before and after the newline.
                                  # * Removing a link will update the text style of the range to match the
                                  #   style of the preceding text (or the default text styles if the preceding
                                  #   text is another link) unless different styles are being set in the same
                                  #   request.
                                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                    # in the presentation. There may not be a slide at this index.
                                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                    # presentation with this ID. A page with this ID may not exist.
                                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                    # addressed by its position.
                              },
                              "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                  # points.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "underline": True or False, # Whether or not the text is underlined.
                            },
                          },
                        },
                        "listId": "A String", # The ID of the list.
                      },
                    },
                    "textElements": [ # The text contents broken down into its component parts, including styling
                        # information. This property is read-only.
                      { # A TextElement describes the content of a range of indices in the text content
                          # of a Shape or TableCell.
                        "autoText": { # A TextElement kind that represents auto text. # A TextElement representing a spot in the text that is dynamically
                            # replaced with content that can change over time.
                          "content": "A String", # The rendered content of this auto text, if available.
                          "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this auto text.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                          "type": "A String", # The type of this auto text.
                        },
                        "endIndex": 42, # The zero-based end index of this text element, exclusive, in Unicode code
                            # units.
                        "startIndex": 42, # The zero-based start index of this text element, in Unicode code units.
                        "paragraphMarker": { # A TextElement kind that represents the beginning of a new paragraph. # A marker representing the beginning of a new paragraph.
                            #
                            # The `start_index` and `end_index` of this TextElement represent the
                            # range of the paragraph. Other TextElements with an index range contained
                            # inside this paragraph's range are considered to be part of this
                            # paragraph. The range of indices of two separate paragraphs will never
                            # overlap.
                          "style": { # Styles that apply to a whole paragraph. # The paragraph's style
                              #
                              # If this text is contained in a shape with a parent placeholder, then these paragraph styles may be
                              # inherited from the parent. Which paragraph styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A paragraph not in a list will inherit its paragraph style from the
                              #   paragraph at the 0 nesting level of the list inside the parent placeholder.
                              # * A paragraph in a list will inherit its paragraph style from the paragraph
                              #   at its corresponding nesting level of the list inside the parent
                              #   placeholder.
                              #
                              # Inherited paragraph styles are represented as unset fields in this message.
                            "spacingMode": "A String", # The spacing mode for the paragraph.
                            "direction": "A String", # The text direction of this paragraph. If unset, the value defaults to
                                # LEFT_TO_RIGHT since
                                # text direction is not inherited.
                            "spaceBelow": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                # inherited from the parent.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "lineSpacing": 3.14, # The amount of space between lines, as a percentage of normal, where normal
                                # is represented as 100.0. If unset, the value is inherited from the parent.
                            "indentStart": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                # the start of the text, based on the current text direction. If unset, the
                                # value is inherited from the parent.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "spaceAbove": { # A magnitude in a single direction in the specified units. # The amount of extra space above the paragraph. If unset, the value is
                                # inherited from the parent.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "indentEnd": { # A magnitude in a single direction in the specified units. # The amount indentation for the paragraph on the side that corresponds to
                                # the end of the text, based on the current text direction. If unset, the
                                # value is inherited from the parent.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "indentFirstLine": { # A magnitude in a single direction in the specified units. # The amount of indentation for the start of the first line of the paragraph.
                                # If unset, the value is inherited from the parent.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "alignment": "A String", # The text alignment for this paragraph.
                          },
                          "bullet": { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                              # belong to a list.
                            "nestingLevel": 42, # The nesting level of this paragraph in the list.
                            "listId": "A String", # The ID of the list this paragraph belongs to.
                            "bulletStyle": { # Represents the styling that can be applied to a TextRun. # The paragraph specific text style applied to this bullet.
                                #
                                # If this text is contained in a shape with a parent placeholder, then these text styles may be
                                # inherited from the parent. Which text styles are inherited depend on the
                                # nesting level of lists:
                                #
                                # * A text run in a paragraph that is not in a list will inherit its text style
                                #   from the the newline character in the paragraph at the 0 nesting level of
                                #   the list inside the parent placeholder.
                                # * A text run in a paragraph that is in a list will inherit its text style
                                #   from the newline character in the paragraph at its corresponding nesting
                                #   level of the list inside the parent placeholder.
                                #
                                # Inherited text styles are represented as unset fields in this message. If
                                # text is contained in a shape without a parent placeholder, unsetting these
                                # fields will revert the style to a value matching the defaults in the Slides
                                # editor.
                              "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "bold": True or False, # Whether or not the text is rendered as bold.
                              "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                  #
                                  # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                  # rendered in a smaller font size, computed based on the `font_size` field.
                                  # The `font_size` itself is not affected by changes in this field.
                              "strikethrough": True or False, # Whether or not the text is struck through.
                              "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                  #
                                  # This field is an extension of `font_family` meant to support explicit font
                                  # weights without breaking backwards compatibility. As such, when reading the
                                  # style of a range of text, the value of `weighted_font_family#font_family`
                                  # will always be equal to that of `font_family`. However, when writing, if
                                  # both fields are included in the field mask (either explicitly or through
                                  # the wildcard `"*"`), their values are reconciled as follows:
                                  #
                                  # * If `font_family` is set and `weighted_font_family` is not, the value of
                                  #   `font_family` is applied with weight `400` ("normal").
                                  # * If both fields are set, the value of `font_family` must match that of
                                  #   `weighted_font_family#font_family`. If so, the font family and weight of
                                  #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                  #   returned.
                                  # * If `weighted_font_family` is set and `font_family` is not, the font
                                  #   family and weight of `weighted_font_family` is applied.
                                  # * If neither field is set, the font family and weight of the text inherit
                                  #   from the parent. Note that these properties cannot inherit separately
                                  #   from each other.
                                  #
                                  # If an update request specifies values for both `weighted_font_family` and
                                  # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                  #
                                  # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                  #
                                  # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                  # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                  # is returned.
                                "fontFamily": "A String", # The font family of the text.
                                    #
                                    # The font family can be any font from the Font menu in Slides or from
                                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                                    # unrecognized, the text is rendered in `Arial`.
                                "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                    # multiple of `100` between `100` and `900`, inclusive. This range
                                    # corresponds to the numerical values described in the CSS 2.1
                                    # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                    # with non-numerical values disallowed. Weights greater than or equal to
                                    # `700` are considered bold, and weights less than `700`are not bold. The
                                    # default value is `400` ("normal").
                              },
                              "smallCaps": True or False, # Whether or not the text is in small capital letters.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                                  #
                                  # Some fonts can affect the weight of the text. If an update request
                                  # specifies values for both `font_family` and `bold`, the explicitly-set
                                  # `bold` value is used.
                              "italic": True or False, # Whether or not the text is italicized.
                              "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                  # are not inherited from parent text.
                                  #
                                  # Changing the link in an update request causes some other changes to the
                                  # text style of the range:
                                  #
                                  # * When setting a link, the text foreground color will be set to
                                  #   ThemeColorType.HYPERLINK and the text will
                                  #   be underlined. If these fields are modified in the same
                                  #   request, those values will be used instead of the link defaults.
                                  # * Setting a link on a text range that overlaps with an existing link will
                                  #   also update the existing link to point to the new URL.
                                  # * Links are not settable on newline characters. As a result, setting a link
                                  #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                  #   will separate the newline character(s) into their own text runs. The
                                  #   link will be applied separately to the runs before and after the newline.
                                  # * Removing a link will update the text style of the range to match the
                                  #   style of the preceding text (or the default text styles if the preceding
                                  #   text is another link) unless different styles are being set in the same
                                  #   request.
                                "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                                "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                    # in the presentation. There may not be a slide at this index.
                                "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                    # presentation with this ID. A page with this ID may not exist.
                                "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                    # addressed by its position.
                              },
                              "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                  # transparent, depending on if the `opaque_color` field in it is set.
                                "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  "themeColor": "A String", # An opaque theme color.
                                  "rgbColor": { # An RGB color. # An opaque RGB color.
                                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                              "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                  # points.
                                "magnitude": 3.14, # The magnitude.
                                "unit": "A String", # The units for magnitude.
                              },
                              "underline": True or False, # Whether or not the text is underlined.
                            },
                            "glyph": "A String", # The rendered bullet glyph for this paragraph.
                          },
                        },
                        "textRun": { # A TextElement kind that represents a run of text that all has the same # A TextElement representing a run of text where all of the characters
                            # in the run have the same TextStyle.
                            #
                            # The `start_index` and `end_index` of TextRuns will always be fully
                            # contained in the index range of a single `paragraph_marker` TextElement.
                            # In other words, a TextRun will never span multiple paragraphs.
                            # styling.
                          "content": "A String", # The text of this run.
                          "style": { # Represents the styling that can be applied to a TextRun. # The styling applied to this run.
                              #
                              # If this text is contained in a shape with a parent placeholder, then these text styles may be
                              # inherited from the parent. Which text styles are inherited depend on the
                              # nesting level of lists:
                              #
                              # * A text run in a paragraph that is not in a list will inherit its text style
                              #   from the the newline character in the paragraph at the 0 nesting level of
                              #   the list inside the parent placeholder.
                              # * A text run in a paragraph that is in a list will inherit its text style
                              #   from the newline character in the paragraph at its corresponding nesting
                              #   level of the list inside the parent placeholder.
                              #
                              # Inherited text styles are represented as unset fields in this message. If
                              # text is contained in a shape without a parent placeholder, unsetting these
                              # fields will revert the style to a value matching the defaults in the Slides
                              # editor.
                            "foregroundColor": { # A color that can either be fully opaque or fully transparent. # The color of the text itself. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "bold": True or False, # Whether or not the text is rendered as bold.
                            "baselineOffset": "A String", # The text's vertical offset from its normal position.
                                #
                                # Text with `SUPERSCRIPT` or `SUBSCRIPT` baseline offsets is automatically
                                # rendered in a smaller font size, computed based on the `font_size` field.
                                # The `font_size` itself is not affected by changes in this field.
                            "strikethrough": True or False, # Whether or not the text is struck through.
                            "weightedFontFamily": { # Represents a font family and weight used to style a TextRun. # The font family and rendered weight of the text.
                                #
                                # This field is an extension of `font_family` meant to support explicit font
                                # weights without breaking backwards compatibility. As such, when reading the
                                # style of a range of text, the value of `weighted_font_family#font_family`
                                # will always be equal to that of `font_family`. However, when writing, if
                                # both fields are included in the field mask (either explicitly or through
                                # the wildcard `"*"`), their values are reconciled as follows:
                                #
                                # * If `font_family` is set and `weighted_font_family` is not, the value of
                                #   `font_family` is applied with weight `400` ("normal").
                                # * If both fields are set, the value of `font_family` must match that of
                                #   `weighted_font_family#font_family`. If so, the font family and weight of
                                #   `weighted_font_family` is applied. Otherwise, a 400 bad request error is
                                #   returned.
                                # * If `weighted_font_family` is set and `font_family` is not, the font
                                #   family and weight of `weighted_font_family` is applied.
                                # * If neither field is set, the font family and weight of the text inherit
                                #   from the parent. Note that these properties cannot inherit separately
                                #   from each other.
                                #
                                # If an update request specifies values for both `weighted_font_family` and
                                # `bold`, the `weighted_font_family` is applied first, then `bold`.
                                #
                                # If `weighted_font_family#weight` is not set, it defaults to `400`.
                                #
                                # If `weighted_font_family` is set, then `weighted_font_family#font_family`
                                # must also be set with a non-empty value. Otherwise, a 400 bad request error
                                # is returned.
                              "fontFamily": "A String", # The font family of the text.
                                  #
                                  # The font family can be any font from the Font menu in Slides or from
                                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                                  # unrecognized, the text is rendered in `Arial`.
                              "weight": 42, # The rendered weight of the text. This field can have any value that is a
                                  # multiple of `100` between `100` and `900`, inclusive. This range
                                  # corresponds to the numerical values described in the CSS 2.1
                                  # Specification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),
                                  # with non-numerical values disallowed. Weights greater than or equal to
                                  # `700` are considered bold, and weights less than `700`are not bold. The
                                  # default value is `400` ("normal").
                            },
                            "smallCaps": True or False, # Whether or not the text is in small capital letters.
                            "fontFamily": "A String", # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Slides or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                                #
                                # Some fonts can affect the weight of the text. If an update request
                                # specifies values for both `font_family` and `bold`, the explicitly-set
                                # `bold` value is used.
                            "italic": True or False, # Whether or not the text is italicized.
                            "link": { # A hypertext link. # The hyperlink destination of the text. If unset, there is no link. Links
                                # are not inherited from parent text.
                                #
                                # Changing the link in an update request causes some other changes to the
                                # text style of the range:
                                #
                                # * When setting a link, the text foreground color will be set to
                                #   ThemeColorType.HYPERLINK and the text will
                                #   be underlined. If these fields are modified in the same
                                #   request, those values will be used instead of the link defaults.
                                # * Setting a link on a text range that overlaps with an existing link will
                                #   also update the existing link to point to the new URL.
                                # * Links are not settable on newline characters. As a result, setting a link
                                #   on a text range that crosses a paragraph boundary, such as `"ABC\n123"`,
                                #   will separate the newline character(s) into their own text runs. The
                                #   link will be applied separately to the runs before and after the newline.
                                # * Removing a link will update the text style of the range to match the
                                #   style of the preceding text (or the default text styles if the preceding
                                #   text is another link) unless different styles are being set in the same
                                #   request.
                              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
                              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                                  # in the presentation. There may not be a slide at this index.
                              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                                  # presentation with this ID. A page with this ID may not exist.
                              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                                  # addressed by its position.
                            },
                            "backgroundColor": { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either opaque or
                                # transparent, depending on if the `opaque_color` field in it is set.
                              "opaqueColor": { # A themeable solid color value. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                "themeColor": "A String", # An opaque theme color.
                                "rgbColor": { # An RGB color. # An opaque RGB color.
                                  "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                                  "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            "fontSize": { # A magnitude in a single direction in the specified units. # The size of the text's font. When read, the `font_size` will specified in
                                # points.
                              "magnitude": 3.14, # The magnitude.
                              "unit": "A String", # The units for magnitude.
                            },
                            "underline": True or False, # Whether or not the text is underlined.
                          },
                        },
                      },
                    ],
                  },
                  "tableCellProperties": { # The properties of the TableCell. # The properties of the table cell.
                    "tableCellBackgroundFill": { # The table cell background fill. # The background fill of the table cell. The default fill matches the fill
                        # for newly created table cells in the Slides editor.
                      "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                          # specified color value.
                          #
                          # If any field is unset, its value may be inherited from a parent placeholder
                          # if it exists.
                        "color": { # A themeable solid color value. # The color value of the solid fill.
                          "themeColor": "A String", # An opaque theme color.
                          "rgbColor": { # An RGB color. # An opaque RGB color.
                            "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                            "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                            "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                          },
                        },
                        "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                            # That is, the final pixel color is defined by the equation:
                            #
                            #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                            #
                            # This means that a value of 1.0 corresponds to a solid color, whereas
                            # a value of 0.0 corresponds to a completely transparent color.
                      },
                      "propertyState": "A String", # The background fill property state.
                          #
                          # Updating the the fill on a table cell will implicitly update this field
                          # to `RENDERED`, unless another value is specified in the same request. To
                          # have no fill on a table cell, set this field to `NOT_RENDERED`. In this
                          # case, any other fill fields set in the same request will be ignored.
                    },
                  },
                  "rowSpan": 42, # Row span of the cell.
                  "columnSpan": 42, # Column span of the cell.
                  "location": { # A location of a single table cell within a table. # The location of the cell within the table.
                    "rowIndex": 42, # The 0-based row index.
                    "columnIndex": 42, # The 0-based column index.
                  },
                },
              ],
              "rowHeight": { # A magnitude in a single direction in the specified units. # Height of a row.
                "magnitude": 3.14, # The magnitude.
                "unit": "A String", # The units for magnitude.
              },
            },
          ],
          "rows": 42, # Number of rows in the table.
          "columns": 42, # Number of columns in the table.
        },
        "line": { # A PageElement kind representing a # A line page element.
            # line, curved connector, or bent connector.
          "lineProperties": { # The properties of the Line. # The properties of the line.
              #
              # When unset, these fields default to values that match the appearance of
              # new lines created in the Slides editor.
            "dashStyle": "A String", # The dash style of the line.
            "weight": { # A magnitude in a single direction in the specified units. # The thickness of the line.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "endArrow": "A String", # The style of the arrow at the end of the line.
            "link": { # A hypertext link. # The hyperlink destination of the line. If unset, there is no link.
              "url": "A String", # If set, indicates this is a link to the external web page at this URL.
              "slideIndex": 42, # If set, indicates this is a link to the slide at this zero-based index
                  # in the presentation. There may not be a slide at this index.
              "pageObjectId": "A String", # If set, indicates this is a link to the specific page in this
                  # presentation with this ID. A page with this ID may not exist.
              "relativeLink": "A String", # If set, indicates this is a link to a slide in this presentation,
                  # addressed by its position.
            },
            "lineFill": { # The fill of the line. # The fill of the line. The default line fill matches the defaults for new
                # lines created in the Slides editor.
              "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
                  # specified color value.
                  #
                  # If any field is unset, its value may be inherited from a parent placeholder
                  # if it exists.
                "color": { # A themeable solid color value. # The color value of the solid fill.
                  "themeColor": "A String", # An opaque theme color.
                  "rgbColor": { # An RGB color. # An opaque RGB color.
                    "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
                    "green": 3.14, # The green component of the color, from 0.0 to 1.0.
                    "red": 3.14, # The red component of the color, from 0.0 to 1.0.
                  },
                },
                "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
                    # That is, the final pixel color is defined by the equation:
                    #
                    #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
                    #
                    # This means that a value of 1.0 corresponds to a solid color, whereas
                    # a value of 0.0 corresponds to a completely transparent color.
              },
            },
            "startArrow": "A String", # The style of the arrow at the beginning of the line.
          },
          "lineType": "A String", # The type of the line.
        },
        "size": { # A width and height. # The size of the page element.
          "width": { # A magnitude in a single direction in the specified units. # The width of the object.
            "magnitude": 3.14, # The magnitude.
            "unit": "A String", # The units for magnitude.
          },
          "height": { # A magnitude in a single direction in the specified units. # The height of the object.
            "magnitude": 3.14, # The magnitude.
            "unit": "A String", # The units for magnitude.
          },
        },
      },
    ],
    "notesProperties": { # The properties of Page that are only # Notes specific properties. Only set if page_type = NOTES.
        # relevant for pages with page_type NOTES.
      "speakerNotesObjectId": "A String", # The object ID of the shape on this notes page that contains the speaker
          # notes for the corresponding slide.
          # The actual shape may not always exist on the notes page. Inserting text
          # using this object ID will automatically create the shape. In this case, the
          # actual shape may have different object ID. The `GetPresentation` or
          # `GetPage` action will always return the latest object ID.
    },
    "objectId": "A String", # The object ID for this page. Object IDs used by
        # Page and
        # PageElement share the same namespace.
    "revisionId": "A String", # The revision ID of the presentation containing this page. Can be used in
        # update requests to assert that the presentation revision hasn't changed
        # since the last read operation. Only populated if the user has edit access
        # to the presentation.
        #
        # The format of the revision ID may change over time, so it should be treated
        # opaquely. A returned revision ID is only guaranteed to be valid for 24
        # hours after it has been returned and cannot be shared across users. If the
        # revision ID is unchanged between calls, then the presentation has not
        # changed. Conversely, a changed ID (for the same presentation and user)
        # usually means the presentation has been updated; however, a changed ID can
        # also be due to internal factors such as ID format changes.
    "pageProperties": { # The properties of the Page. # The properties of the page.
        #
        # The page will inherit properties from the parent page. Depending on the page
        # type the hierarchy is defined in either
        # SlideProperties or
        # LayoutProperties.
      "pageBackgroundFill": { # The page background fill. # The background fill of the page. If unset, the background fill is inherited
          # from a parent page if it exists. If the page has no parent, then the
          # background fill defaults to the corresponding fill in the Slides editor.
        "solidFill": { # A solid color fill. The page or page element is filled entirely with the # Solid color fill.
            # specified color value.
            #
            # If any field is unset, its value may be inherited from a parent placeholder
            # if it exists.
          "color": { # A themeable solid color value. # The color value of the solid fill.
            "themeColor": "A String", # An opaque theme color.
            "rgbColor": { # An RGB color. # An opaque RGB color.
              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
            },
          },
          "alpha": 3.14, # The fraction of this `color` that should be applied to the pixel.
              # That is, the final pixel color is defined by the equation:
              #
              #   pixel color = alpha * (color) + (1.0 - alpha) * (background color)
              #
              # This means that a value of 1.0 corresponds to a solid color, whereas
              # a value of 0.0 corresponds to a completely transparent color.
        },
        "propertyState": "A String", # The background fill property state.
            #
            # Updating the the fill on a page will implicitly update this field to
            # `RENDERED`, unless another value is specified in the same request. To
            # have no fill on a page, set this field to `NOT_RENDERED`. In this case,
            # any other fill fields set in the same request will be ignored.
        "stretchedPictureFill": { # The stretched picture fill. The page or page element is filled entirely with # Stretched picture fill.
            # the specified picture. The picture is stretched to fit its container.
          "contentUrl": "A String", # Reading the content_url:
              #
              # An URL to a picture with a default lifetime of 30 minutes.
              # This URL is tagged with the account of the requester. Anyone with the URL
              # effectively accesses the picture as the original requester. Access to the
              # picture may be lost if the presentation's sharing settings change.
              #
              # Writing the content_url:
              #
              # The picture is fetched once at insertion time and a copy is stored for
              # display inside the presentation. Pictures must be less than 50MB in size,
              # cannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF
              # format.
          "size": { # A width and height. # The original size of the picture fill. This field is read-only.
            "width": { # A magnitude in a single direction in the specified units. # The width of the object.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
            "height": { # A magnitude in a single direction in the specified units. # The height of the object.
              "magnitude": 3.14, # The magnitude.
              "unit": "A String", # The units for magnitude.
            },
          },
        },
      },
      "colorScheme": { # The palette of predefined colors for a page. # The color scheme of the page. If unset, the color scheme is inherited from
          # a parent page. If the page has no parent, the color scheme uses a default
          # Slides color scheme. This field is read-only.
        "colors": [ # The ThemeColorType and corresponding concrete color pairs.
          { # A pair mapping a theme color type to the concrete color it represents.
            "color": { # An RGB color. # The concrete color corresponding to the theme color type above.
              "blue": 3.14, # The blue component of the color, from 0.0 to 1.0.
              "green": 3.14, # The green component of the color, from 0.0 to 1.0.
              "red": 3.14, # The red component of the color, from 0.0 to 1.0.
            },
            "type": "A String", # The type of the theme color.
          },
        ],
      },
    },
    "pageType": "A String", # The type of the page.
    "slideProperties": { # The properties of Page that are only # Slide specific properties. Only set if page_type = SLIDE.
        # relevant for pages with page_type SLIDE.
      "notesPage": # Object with schema name: Page # The notes page that this slide is associated with. It defines the visual
          # appearance of a notes page when printing or exporting slides with speaker
          # notes. A notes page inherits properties from the
          # notes master.
          # The placeholder shape with type BODY on the notes page contains the speaker
          # notes for this slide. The ID of this shape is identified by the
          # speakerNotesObjectId field.
          # The notes page is read-only except for the text content and styles of the
          # speaker notes shape.
      "masterObjectId": "A String", # The object ID of the master that this slide is based on.
      "layoutObjectId": "A String", # The object ID of the layout that this slide is based on.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="getThumbnail">getThumbnail(presentationId, pageObjectId, thumbnailProperties_mimeType=None, thumbnailProperties_thumbnailSize=None, x__xgafv=None)</code>
  <pre>Generates a thumbnail of the latest version of the specified page in the
presentation and returns a URL to the thumbnail image.

Args:
  presentationId: string, The ID of the presentation to retrieve. (required)
  pageObjectId: string, The object ID of the page whose thumbnail to retrieve. (required)
  thumbnailProperties_mimeType: string, The optional mime type of the thumbnail image.

If you don't specify the mime type, the default mime type will be PNG.
  thumbnailProperties_thumbnailSize: string, The optional thumbnail image size.

If you don't specify the size, the server chooses a default size of the
image.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The thumbnail of a page.
    "contentUrl": "A String", # The content URL of the thumbnail image.
        #
        # The URL to the image has a default lifetime of 30 minutes.
        # This URL is tagged with the account of the requester. Anyone with the URL
        # effectively accesses the image as the original requester. Access to the
        # image may be lost if the presentation's sharing settings change.
        # The mime type of the thumbnail image is the same as specified in the
        # `GetPageThumbnailRequest`.
    "width": 42, # The positive width in pixels of the thumbnail image.
    "height": 42, # The positive height in pixels of the thumbnail image.
  }</pre>
</div>

</body></html>