<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="docs_v1.html">Google Docs API</a> . <a href="docs_v1.documents.html">documents</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchUpdate">batchUpdate(documentId, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Applies one or more updates to the document.</p>
<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a blank document using the title given in the request. Other fields</p>
<p class="toc_element">
  <code><a href="#get">get(documentId, suggestionsViewMode=None, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the latest version of the specified document.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchUpdate">batchUpdate(documentId, body=None, x__xgafv=None)</code>
  <pre>Applies one or more updates to the document.

Each request is validated before
being applied. If any request is not valid, then the entire request will
fail and nothing will be applied.

Some requests have replies to
give you some information about how they are applied. Other requests do
not need to return information; these each return an empty reply.
The order of replies matches that of the requests.

For example, suppose you call batchUpdate with four updates, and only the
third one returns information. The response would have two empty replies,
the reply to the third request, and another empty reply, in that order.

Because other users may be editing the document, the document
might not exactly reflect your changes: your changes may
be altered with respect to collaborator changes. If there are no
collaborators, the document should reflect your changes. In any case,
the updates in your request are guaranteed to be applied together
atomically.

Args:
  documentId: string, The ID of the document to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for BatchUpdateDocument.
    &quot;requests&quot;: [ # A list of updates to apply to the document.
      { # A single update to apply to a document.
        &quot;updateTableRowStyle&quot;: { # Updates the TableRowStyle of rows in a # Updates the row style in a table.
            # table.
          &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The styles to be set on the rows.
            &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                # at a height equal to or greater than this value in order to show all the
                # content in the row&#x27;s cells.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `tableRowStyle` is implied
              # and should not be specified. A single `&quot;*&quot;` can be used as short-hand for
              # listing every field.
              #
              # For example to update the minimum row height, set `fields` to
              # `&quot;min_row_height&quot;`.
          &quot;rowIndices&quot;: [ # The list of zero-based row indices whose style should be updated. If no
              # indices are specified, all rows will be updated.
            42,
          ],
          &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;deleteHeader&quot;: { # Deletes a Header from the document. # Deletes a header from the document.
          &quot;headerId&quot;: &quot;A String&quot;, # The id of the header to delete. If this header is defined on
              # DocumentStyle, the reference to
              # this header is removed, resulting in no header of that type for
              # the first section of the document. If this header is defined on a
              # SectionStyle, the reference to this
              # header is removed and the header of that type is now continued from
              # the previous section.
        },
        &quot;deleteParagraphBullets&quot;: { # Deletes bullets from all of the paragraphs that overlap with the given range. # Deletes bullets from paragraphs.
            #
            # The nesting level of each paragraph will be visually preserved by adding
            # indent to the start of the corresponding paragraph.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range to delete bullets from.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
        },
        &quot;deleteNamedRange&quot;: { # Deletes a NamedRange. # Deletes a named range.
          &quot;name&quot;: &quot;A String&quot;, # The name of the range(s) to delete. All named ranges with the given
              # name will be deleted.
          &quot;namedRangeId&quot;: &quot;A String&quot;, # The ID of the named range to delete.
        },
        &quot;insertTableRow&quot;: { # Inserts an empty row into a table. # Inserts an empty row into a table.
          &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The reference table cell location from which rows will be inserted.
              #
              # A new row will be inserted above (or below) the row where the reference
              # cell is. If the reference cell is a merged cell, a new row will be
              # inserted above (or below) the merged cell.
            &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
              &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                  #
                  # The index is relative to the beginning of the segment specified by
                  # segment_id.
              &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                  # segment ID signifies the document&#x27;s body.
            },
            &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                # row index of 1.
            &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                # has a column index of 1.
          },
          &quot;insertBelow&quot;: True or False, # Whether to insert new row below the reference cell location.
              #
              # - `True`: insert below the cell.
              # - `False`: insert above the cell.
        },
        &quot;createFootnote&quot;: { # Creates a Footnote segment # Creates a footnote.
            # and inserts a new FootnoteReference
            # to it at the given location.
            #
            # The new Footnote segment will contain a
            # space followed by a newline character.
          &quot;location&quot;: { # A particular location in the document. # Inserts the footnote reference at a specific index in the document.
              #
              # The footnote reference must be inserted inside the bounds of an existing
              # Paragraph. For instance, it cannot be
              # inserted at a table&#x27;s start index (i.e. between the table and its
              # preceding paragraph).
              #
              # Footnote references cannot be inserted inside an equation,
              # header, footer or footnote. Since footnote references can only be
              # inserted in the body, the segment ID field must be empty.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;endOfSegmentLocation&quot;: { # Location at the end of a body, header, footer or footnote. The location is # Inserts the footnote reference at the end of the document body.
              #
              # Footnote references cannot be inserted inside a header, footer or
              # footnote. Since footnote references can only be inserted in the body, the
              # segment ID field
              # must be empty.
              # immediately before the last newline in the document segment.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;updateTableColumnProperties&quot;: { # Updates the # Updates the properties of columns in a table.
            # TableColumnProperties of columns
            # in a table.
          &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `tableColumnProperties` is
              # implied and should not be specified. A single `&quot;*&quot;` can be used as
              # short-hand for listing every field.
              #
              # For example to update the column width, set `fields` to `&quot;width&quot;`.
          &quot;columnIndices&quot;: [ # The list of zero-based column indices whose property should be updated. If
              # no indices are specified, all columns will be updated.
            42,
          ],
          &quot;tableColumnProperties&quot;: { # The properties of a column in a table. # The table column properties to update.
              #
              # If the value of `table_column_properties#width` is less than 5 points
              # (5/72 inch), a 400 bad request error is returned.
            &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                # FIXED_WIDTH.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
        },
        &quot;updateTableCellStyle&quot;: { # Updates the style of a range of table cells. # Updates the style of table cells.
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `tableCellStyle` is implied
              # and should not be specified. A single `&quot;*&quot;` can be used as short-hand for
              # listing every field.
              #
              # For example to update the table cell background color, set `fields` to
              # `&quot;backgroundColor&quot;`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style to set on the table cells.
              #
              # When updating borders, if a cell shares a border with an adjacent cell, the
              # corresponding border property of the adjacent cell is updated as well.
              # Borders that are merged and invisible are not updated.
              #
              # Since updating a border shared by adjacent cells in the same request can
              # cause conflicting border updates, border updates are applied in the
              # following order:
              #
              # - `border_right`
              # - `border_left`
              # - `border_bottom`
              # - `border_top`
              #
              # Inherited table cell styles are represented as unset fields in this message.
              # A table cell style can inherit from the table&#x27;s style.
            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                #
                # Table cell borders cannot be transparent. To hide a table cell border, make
                # its width 0.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  #
                  # This color cannot be transparent.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                #
                # Table cell borders cannot be transparent. To hide a table cell border, make
                # its width 0.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  #
                  # This color cannot be transparent.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                #
                # Table cell borders cannot be transparent. To hide a table cell border, make
                # its width 0.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  #
                  # This color cannot be transparent.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                #
                # Table cell borders cannot be transparent. To hide a table cell border, make
                # its width 0.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  #
                  # This color cannot be transparent.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;columnSpan&quot;: 42, # The column span of the cell.
                #
                # This property is read-only.
            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                # matches the alignment for newly created table cells in the Docs editor.
            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;rowSpan&quot;: 42, # The row span of the cell.
                #
                # This property is read-only.
          },
          &quot;tableRange&quot;: { # A table range represents a reference to a subset of a table. # The table range representing the subset of the table to which the updates
              # are applied.
              #
              # It&#x27;s important to note that the cells specified by a table range do not
              # necessarily form a rectangle. For example, let&#x27;s say we have a 3 x 3 table
              # where all the cells of the last row are merged together. The table looks
              # like this:
              #
              #
              #      [             ]
              #
              # A table range with table cell location = (table_start_location, row = 0,
              # column = 0), row span = 3 and column span = 2 specifies the following cells:
              #
              #       x     x
              #      [ x    x    x ]
            &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The cell location where the table range starts.
              &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
                &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                    #
                    # The index is relative to the beginning of the segment specified by
                    # segment_id.
                &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                    # segment ID signifies the document&#x27;s body.
              },
              &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                  # row index of 1.
              &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                  # has a column index of 1.
            },
            &quot;columnSpan&quot;: 42, # The column span of the table range.
            &quot;rowSpan&quot;: 42, # The row span of the table range.
          },
          &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document. When specified, the
              # updates are applied to all the cells in the table.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;replaceNamedRangeContent&quot;: { # Replaces the contents of the specified # Replaces the content in a named range.
            # NamedRange or
            # NamedRanges with the given replacement
            # content.
            #
            # Note that an individual NamedRange may
            # consist of multiple discontinuous
            # ranges. In this case, only the
            # content in the first range will be replaced. The other ranges and their
            # content will be deleted.
            #
            # In cases where replacing or deleting any ranges would result in an invalid
            # document structure, a 400 bad request error is returned.
          &quot;namedRangeName&quot;: &quot;A String&quot;, # The name of the NamedRanges whose
              # content will be replaced.
              #
              # If there are multiple named ranges with the given name, then
              # the content of each one will be replaced. If there are no named ranges
              # with the given name, then the request will be a no-op.
          &quot;namedRangeId&quot;: &quot;A String&quot;, # The ID of the named range whose content will be replaced.
              #
              # If there is no named range with the given ID a 400 bad request error is
              # returned.
          &quot;text&quot;: &quot;A String&quot;, # Replaces the content of the specified named range(s) with the given text.
        },
        &quot;deleteFooter&quot;: { # Deletes a Footer from the document. # Deletes a footer from the document.
          &quot;footerId&quot;: &quot;A String&quot;, # The id of the footer to delete. If this footer is defined on
              # DocumentStyle, the reference to
              # this footer is removed, resulting in no footer of that type for
              # the first section of the document. If this footer is defined on a
              # SectionStyle, the reference to this
              # footer is removed and the footer of that type is now continued from
              # the previous section.
        },
        &quot;deleteContentRange&quot;: { # Deletes content from the document. # Deletes content from the document.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range of content to delete.
              #
              # Deleting text that crosses a paragraph boundary may result in changes
              # to paragraph styles, lists, positioned objects and bookmarks as the two
              # paragraphs are merged.
              #
              # Attempting to delete certain ranges can result in an invalid document
              # structure in which case a 400 bad request error is returned.
              #
              # Some examples of invalid delete requests include:
              #
              # * Deleting one code unit of a surrogate pair.
              # * Deleting the last newline character of a Body, Header,
              #   Footer, Footnote, TableCell or TableOfContents.
              # * Deleting the start or end of a Table,
              #   TableOfContents or Equation without deleting the entire element.
              # * Deleting the newline character before a
              #   Table,
              #   TableOfContents or
              #   SectionBreak without deleting the
              #   element.
              # * Deleting individual rows or cells of a table. Deleting the content within
              #   a table cell is allowed.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
        },
        &quot;updateDocumentStyle&quot;: { # Updates the DocumentStyle. # Updates the style of the document.
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `document_style` is
              # implied and should not be specified. A single `&quot;*&quot;` can be used as
              # short-hand for listing every field.
              #
              # For example to update the background, set `fields` to `&quot;background&quot;`.
          &quot;documentStyle&quot;: { # The style of the document. # The styles to set on the document.
              #
              # Certain document style changes may cause other changes in order to mirror
              # the behavior of the Docs editor. See the documentation of DocumentStyle for more information.
            &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
                # use_even_page_header_footer determines
                # whether to use the default_header_id or this value for the
                # header on even pages. If not set, there is no even page header.
                #
                # This property is read-only.
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
                #
                # Updating the left page margin on the document style clears the left page
                # margin on all section styles. It may also cause columns to resize in all
                # sections.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
                # margin_header,
                # SectionStyle
                # margin_header and
                # DocumentStyle
                # margin_footer,
                # SectionStyle
                # margin_footer are
                # respected. When false, the default values in the Docs editor for header and
                # footer margin are used.
                #
                # This property is read-only.
            &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                # page.
            &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
              &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
                # footer.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
                # use_even_page_header_footer determines
                # whether to use the default_footer_id or this value for the
                # footer on even pages. If not set, there is no even page footer.
                #
                # This property is read-only.
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
                #
                # Updating the bottom page margin on the document style clears the bottom
                # page margin on all section styles.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
                # background color.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
                #
                # Updating the right page margin on the document style clears the right page
                # margin on all section styles. It may also cause columns to resize in all
                # sections.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
                # pages.
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
                #
                # Updating the top page margin on the document style clears the top page
                # margin on all section styles.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
                #
                # This property is read-only.
            &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
                # header.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
                # a unique footer for the first page does not exist. The value of
                # use_first_page_header_footer determines
                # whether to use the default_footer_id or this value for the
                # footer on the first page. If not set, there is no first page footer.
                #
                # This property is read-only.
            &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
                #
                # This property is read-only.
            &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
                # a unique header for the first page does not exist.
                # The value of use_first_page_header_footer determines
                # whether to use the default_header_id or this value for the
                # header on the first page. If not set, there is no first page header.
                #
                # This property is read-only.
          },
        },
        &quot;unmergeTableCells&quot;: { # Unmerges cells in a Table. # Unmerges cells in a table.
          &quot;tableRange&quot;: { # A table range represents a reference to a subset of a table. # The table range specifying which cells of the table to unmerge.
              #
              # All merged cells in this range will be unmerged, and cells that are already
              # unmerged will not be affected. If the range has no merged cells, the
              # request will do nothing.
              #
              # If there is text in any of the merged cells, the text will remain in the
              # &quot;head&quot; cell of the resulting block of unmerged cells. The &quot;head&quot; cell is
              # the upper-left cell when the content direction is from left to right, and
              # the upper-right otherwise.
              #
              # It&#x27;s important to note that the cells specified by a table range do not
              # necessarily form a rectangle. For example, let&#x27;s say we have a 3 x 3 table
              # where all the cells of the last row are merged together. The table looks
              # like this:
              #
              #
              #      [             ]
              #
              # A table range with table cell location = (table_start_location, row = 0,
              # column = 0), row span = 3 and column span = 2 specifies the following cells:
              #
              #       x     x
              #      [ x    x    x ]
            &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The cell location where the table range starts.
              &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
                &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                    #
                    # The index is relative to the beginning of the segment specified by
                    # segment_id.
                &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                    # segment ID signifies the document&#x27;s body.
              },
              &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                  # row index of 1.
              &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                  # has a column index of 1.
            },
            &quot;columnSpan&quot;: 42, # The column span of the table range.
            &quot;rowSpan&quot;: 42, # The row span of the table range.
          },
        },
        &quot;insertText&quot;: { # Inserts text at the specified location. # Inserts text at the specified location.
          &quot;endOfSegmentLocation&quot;: { # Location at the end of a body, header, footer or footnote. The location is # Inserts the text at the end of a header, footer, footnote or
              # the document body.
              # immediately before the last newline in the document segment.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;location&quot;: { # A particular location in the document. # Inserts the text at a specific index in the document.
              #
              # Text must be inserted inside the bounds of an existing
              # Paragraph. For instance, text cannot be
              # inserted at a table&#x27;s start index (i.e. between the table and its
              # preceding paragraph). The text must be inserted in the preceding
              # paragraph.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;text&quot;: &quot;A String&quot;, # The text to be inserted.
              #
              # Inserting a newline character will implicitly create a new
              # Paragraph at that index.
              # The paragraph style of the new paragraph will be copied from the paragraph
              # at the current insertion index, including lists and bullets.
              #
              # Text styles for inserted text will be determined automatically, generally
              # preserving the styling of neighboring text. In most cases, the text style
              # for the inserted text will match the text immediately before the insertion
              # index.
              #
              # Some control characters (U+0000-U+0008, U+000C-U+001F) and characters
              # from the Unicode Basic Multilingual Plane Private Use Area (U+E000-U+F8FF)
              # will be stripped out of the inserted text.
        },
        &quot;updateTextStyle&quot;: { # Update the styling of text. # Updates the text style at the specified range.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range of text to style.
              #
              # The range may be extended to include adjacent newlines.
              #
              # If the range fully contains a paragraph belonging to a list, the
              # paragraph&#x27;s bullet is also updated with the matching text style.
              #
              # Ranges cannot be inserted inside a relative UpdateTextStyleRequest.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `text_style` is implied and
              # should not be specified. A single `&quot;*&quot;` can be used as short-hand for
              # listing every field.
              #
              # For example, to update the text style to bold, set `fields` to `&quot;bold&quot;`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The styles to set on the text.
              #
              # If the value for a particular style matches that of the parent, that style
              # will be set to inherit.
              #
              # Certain text style changes may cause other changes in order to to mirror
              # the behavior of the Docs editor. See the documentation of
              # TextStyle for more information.
              #
              # Inherited text styles are represented as unset fields in this message. A
              # text style&#x27;s parent depends on where the text style is defined:
              #
              #   * The TextStyle of text in a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The TextStyle on a named style
              #     inherits from the normal text named style.
              #   * The TextStyle of the normal text named style inherits
              #     from the default text style in the Docs editor.
              #   * The TextStyle on a Paragraph element
              #     that is contained in a table may inherit its text style from the table
              #     style.
              #
              # If the text style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
            &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
            &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                # or transparent, depending on the `color` field.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                #
                # 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.
              &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                  #
                  # The font family can be any font from the Font menu in Docs or from
                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                  # unrecognized, the text is rendered in `Arial`.
              &quot;weight&quot;: 42, # The weight of the font. 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.
                  #
                  # The default value is `400` (&quot;normal&quot;).
                  #
                  # The font weight makes up just one component of the rendered font weight.
                  # The rendered weight is determined by a combination of the `weight` and the
                  # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                  #
                  # * If the text is bold and the weight is less than `400`, the rendered
                  #   weight is 400.
                  # * If the text is bold and the weight is greater than or equal to `400` but
                  #   is less than `700`, the rendered weight is `700`.
                  # * If the weight is greater than or equal to `700`, the rendered weight is
                  #   equal to the weight.
                  # * If the text is not bold, the rendered weight is equal to the weight.
            },
            &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;italic&quot;: True or False, # Whether or not the text is italicized.
            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                # or transparent, depending on the `color` field.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;underline&quot;: True or False, # Whether or not the text is underlined.
            &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                #   default link color 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 `&quot;ABC\n123&quot;`,
                #   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.
              &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
              &quot;url&quot;: &quot;A String&quot;, # An external URL.
              &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
            },
            &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
            &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
          },
        },
        &quot;replaceImage&quot;: { # Replaces an existing image with a new image. # Replaces an image in the document.
            #
            # Replacing an image removes some image effects from the existing image in order to
            # mirror the behavior of the Docs editor.
          &quot;imageObjectId&quot;: &quot;A String&quot;, # The ID of the existing image that will be replaced.
          &quot;uri&quot;: &quot;A String&quot;, # The URI of the new image.
              #
              # The image is fetched once at insertion time and a copy is stored for
              # display inside the document. Images must be less than 50MB in size, cannot
              # exceed 25 megapixels, and must be in one of PNG, JPEG, or GIF format.
              #
              # The provided URI can be at most 2 kB in length. The URI itself is saved
              # with the image, and exposed via the ImageProperties.source_uri field.
          &quot;imageReplaceMethod&quot;: &quot;A String&quot;, # The replacement method.
        },
        &quot;createNamedRange&quot;: { # Creates a NamedRange referencing the given # Creates a named range.
            # range.
          &quot;name&quot;: &quot;A String&quot;, # The name of the NamedRange. Names do not need to be unique.
              #
              # Names must be at least 1 character and no more than 256 characters,
              # measured in UTF-16 code units.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range to apply the name to.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
        },
        &quot;insertTable&quot;: { # Inserts a table at the specified location. # Inserts a table at the specified location.
            #
            # A newline character will be inserted before the inserted table.
          &quot;columns&quot;: 42, # The number of columns in the table.
          &quot;rows&quot;: 42, # The number of rows in the table.
          &quot;location&quot;: { # A particular location in the document. # Inserts the table at a specific model index.
              #
              # A newline character will be inserted before the inserted table, therefore
              # the table start index will be at the specified location index + 1.
              #
              # The table must be inserted inside the bounds of an existing
              # Paragraph. For instance, it cannot be
              # inserted at a table&#x27;s start index (i.e. between an existing table and its
              # preceding paragraph).
              #
              # Tables cannot be inserted inside a footnote or equation.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;endOfSegmentLocation&quot;: { # Location at the end of a body, header, footer or footnote. The location is # Inserts the table at the end of the given header, footer or document
              # body. A newline character will be inserted before the inserted table.
              #
              # Tables cannot be inserted inside a footnote.
              # immediately before the last newline in the document segment.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;updateSectionStyle&quot;: { # Updates the SectionStyle. # Updates the section style of the specified range.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range overlapping the sections to style.
              #
              # Because section breaks can only be inserted inside the body, the segment
              # ID field must be empty.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `section_style` is
              # implied and must not be specified. A single `&quot;*&quot;` can be used as
              # short-hand for listing every field.
              #
              # For example to update the left margin, set `fields` to `&quot;margin_left&quot;`.
          &quot;sectionStyle&quot;: { # The styling that applies to a section. # The styles to  be set on the section.
              #
              # Certain section style changes may cause other changes in order to mirror
              # the behavior of the Docs editor. See the documentation of SectionStyle for more information.
            &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                # updated, use_custom_header_footer_margins is set
                # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                # DocumentStyle indicates if a footer margin is being respected for this
                # section
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                # LEFT_TO_RIGHT.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                # updated, use_custom_header_footer_margins is set
                # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                # DocumentStyle indicates if a header margin is being respected for this
                # section.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                # Updating right margin causes columns in this section to resize. Since
                # the margin affects column width, it is applied before column properties.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                #
                # If empty, the section contains one column with the default properties in
                # the Docs editor.
                # A section can be updated to have no more than three columns.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property will result in a 400 bad request error.
              { # Properties that apply to a section&#x27;s column.
                &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                # Updating left margin causes columns in this section to resize. Since
                # the margin affects column width, it is applied before column properties.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                # previous SectionBreak&#x27;s SectionStyle.
                # If the value is unset in the first SectionBreak, it inherits from
                # DocumentStyle&#x27;s default_footer_id.
                #
                # This property is read-only.
            &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                # DocumentStyle&#x27;s use_even_page_header_footer is true,
                # this value is used for the headers on even pages in the section. If it
                # is false, the headers on even pages uses the default_header_id. If unset, the value
                # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # even_page_header_id.
                #
                # This property is read-only.
            &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                # section. If unset, page numbering continues from the previous section.
                # If the value is unset in the first
                # SectionBreak, refer to DocumentStyle&#x27;s
                # page_number_start.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                # previous SectionBreak&#x27;s SectionStyle.
                # If the value is unset in the first SectionBreak, it inherits from
                # DocumentStyle&#x27;s default_header_id.
                #
                # This property is read-only.
            &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                # DocumentStyle&#x27;s use_even_page_header_footer is true,
                # this value is used for the footers on even pages in the section. If it
                # is false, the footers on even pages uses the default_footer_id. If unset, the value
                # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # even_page_footer_id.
                #
                # This property is read-only.
            &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                #
                # This style can be set even when there is one column in the section.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                # use_first_page_header_footer for the
                # first section. If the value is unset for subsequent sectors, it should be
                # interpreted as false.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                # If use_first_page_header_footer is true,
                # this value is used for the header on the first page of the section. If
                # it is false, the header on the first page of the section uses the
                # default_header_id.
                # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # first_page_header_id.
                #
                # This property is read-only.
            &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                # If use_first_page_header_footer is true,
                # this value is used for the footer on the first page of the section. If
                # it is false, the footer on the first page of the section uses the
                # default_footer_id.
                # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # first_page_footer_id.
                #
                # This property is read-only.
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
          },
        },
        &quot;insertInlineImage&quot;: { # Inserts an InlineObject containing an # Inserts an inline image at the specified location.
            # image at the given location.
          &quot;location&quot;: { # A particular location in the document. # Inserts the image at a specific index in the document.
              #
              # The image must be inserted inside the bounds of an existing
              # Paragraph. For instance, it cannot be
              # inserted at a table&#x27;s start index (i.e. between the table and its
              # preceding paragraph).
              #
              # Inline images cannot be inserted inside a footnote or equation.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;uri&quot;: &quot;A String&quot;, # The image URI.
              #
              # The image is fetched once at insertion time and a copy is stored for
              # display inside the document. Images must be less than 50MB in size, cannot
              # exceed 25 megapixels, and must be in one of PNG, JPEG, or GIF format.
              #
              # The provided URI can be at most 2 kB in length. The URI itself is saved
              # with the image, and exposed via the ImageProperties.content_uri field.
          &quot;objectSize&quot;: { # A width and height. # The size that the image should appear as in the document. This property is
              # optional and the final size of the image in the document is determined by
              # the following rules:
              #  * If neither width nor height is specified, then a default size of the
              #  image is calculated based on its resolution.
              #  * If one dimension is specified then the other dimension is calculated to
              #  preserve the aspect ratio of the image.
              #  * If both width and height are specified, the image is scaled to fit
              #  within the provided dimensions while maintaining its aspect ratio.
            &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;endOfSegmentLocation&quot;: { # Location at the end of a body, header, footer or footnote. The location is # Inserts the text at the end of a header, footer or the document body.
              #
              # Inline images cannot be inserted inside a footnote.
              # immediately before the last newline in the document segment.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;deleteTableColumn&quot;: { # Deletes a column from a table. # Deletes a column from a table.
          &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The reference table cell location from which the column will be deleted.
              #
              # The column this cell spans will be deleted. If this is a merged cell that
              # spans multiple columns, all columns that the cell spans will be deleted. If
              # no columns remain in the table after this deletion, the whole table is
              # deleted.
            &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
              &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                  #
                  # The index is relative to the beginning of the segment specified by
                  # segment_id.
              &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                  # segment ID signifies the document&#x27;s body.
            },
            &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                # row index of 1.
            &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                # has a column index of 1.
          },
        },
        &quot;replaceAllText&quot;: { # Replaces all instances of text matching a criteria with replace text. # Replaces all instances of the specified text.
          &quot;containsText&quot;: { # A criteria that matches a specific string of text in the document. # Finds text in the document matching this substring.
            &quot;matchCase&quot;: True or False, # Indicates whether the search should respect case:
                #
                # - `True`: the search is case sensitive.
                # - `False`: the search is case insensitive.
            &quot;text&quot;: &quot;A String&quot;, # The text to search for in the document.
          },
          &quot;replaceText&quot;: &quot;A String&quot;, # The text that will replace the matched text.
        },
        &quot;createHeader&quot;: { # Creates a Header. The new header is applied to # Creates a header.
            # the SectionStyle at the location of the
            # SectionBreak if specificed, otherwise
            # it is applied to the DocumentStyle.
            #
            # If a header of the specified type already exists, a 400 bad request error
            # is returned.
          &quot;sectionBreakLocation&quot;: { # A particular location in the document. # The location of the SectionBreak
              # which begins the section this header should belong to. If
              # `section_break_location&#x27; is unset or if it refers to the first section
              # break in the document body, the header applies to the
              # DocumentStyle
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;type&quot;: &quot;A String&quot;, # The type of header to create.
        },
        &quot;createParagraphBullets&quot;: { # Creates bullets for all of the paragraphs that overlap with the given range. # Creates bullets for paragraphs.
            #
            # The nesting level of each paragraph will be determined by counting leading
            # tabs in front of each paragraph. To avoid excess space between the bullet and
            # the corresponding paragraph, these leading tabs are removed by this request.
            # This may change the indices of parts of the text.
            #
            # If the paragraph immediately before paragraphs being updated is in a list
            # with a matching preset, the paragraphs being updated are added to that
            # preceding list.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range to apply the bullet preset to.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
          &quot;bulletPreset&quot;: &quot;A String&quot;, # The kinds of bullet glyphs to be used.
        },
        &quot;deleteTableRow&quot;: { # Deletes a row from a table. # Deletes a row from a table.
          &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The reference table cell location from which the row will be deleted.
              #
              # The row this cell spans will be deleted. If this is a merged cell that
              # spans multiple rows, all rows that the cell spans will be deleted. If no
              # rows remain in the table after this deletion, the whole table is deleted.
            &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
              &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                  #
                  # The index is relative to the beginning of the segment specified by
                  # segment_id.
              &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                  # segment ID signifies the document&#x27;s body.
            },
            &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                # row index of 1.
            &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                # has a column index of 1.
          },
        },
        &quot;mergeTableCells&quot;: { # Merges cells in a Table. # Merges cells in a table.
          &quot;tableRange&quot;: { # A table range represents a reference to a subset of a table. # The table range specifying which cells of the table to merge.
              #
              # Any text in the cells being merged will be concatenated and stored in the
              # &quot;head&quot; cell of the range. This is the upper-left cell of the range when
              # the content direction is left to right, and the upper-right cell of the
              # range otherwise.
              #
              # If the range is non-rectangular (which can occur in some cases where the
              # range covers cells that are already merged or where the table is
              # non-rectangular), a 400 bad request error is returned.
              #
              # It&#x27;s important to note that the cells specified by a table range do not
              # necessarily form a rectangle. For example, let&#x27;s say we have a 3 x 3 table
              # where all the cells of the last row are merged together. The table looks
              # like this:
              #
              #
              #      [             ]
              #
              # A table range with table cell location = (table_start_location, row = 0,
              # column = 0), row span = 3 and column span = 2 specifies the following cells:
              #
              #       x     x
              #      [ x    x    x ]
            &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The cell location where the table range starts.
              &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
                &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                    #
                    # The index is relative to the beginning of the segment specified by
                    # segment_id.
                &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                    # segment ID signifies the document&#x27;s body.
              },
              &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                  # row index of 1.
              &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                  # has a column index of 1.
            },
            &quot;columnSpan&quot;: 42, # The column span of the table range.
            &quot;rowSpan&quot;: 42, # The row span of the table range.
          },
        },
        &quot;deletePositionedObject&quot;: { # Deletes a PositionedObject from the # Deletes a positioned object from the document.
            # document.
          &quot;objectId&quot;: &quot;A String&quot;, # The ID of the positioned object to delete.
        },
        &quot;insertPageBreak&quot;: { # Inserts a page break followed by a newline at the specified location. # Inserts a page break at the specified location.
          &quot;location&quot;: { # A particular location in the document. # Inserts the page break at a specific index in the document.
              #
              # The page break must be inserted inside the bounds of an existing
              # Paragraph. For instance, it cannot be
              # inserted at a table&#x27;s start index (i.e. between the table and its
              # preceding paragraph).
              #
              # Page breaks cannot be inserted inside a table, equation, footnote, header
              # or footer. Since page breaks can only be inserted inside the body, the
              # segment ID field must be
              # empty.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;endOfSegmentLocation&quot;: { # Location at the end of a body, header, footer or footnote. The location is # Inserts the page break at the end of the document body.
              #
              # Page breaks cannot be inserted inside a footnote, header or footer.
              # Since page breaks can only be inserted inside the body, the segment ID field must be
              # empty.
              # immediately before the last newline in the document segment.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;insertSectionBreak&quot;: { # Inserts a section break at the given location. # Inserts a section break at the specified location.
            #
            # A newline character will be inserted before the section break.
          &quot;endOfSegmentLocation&quot;: { # Location at the end of a body, header, footer or footnote. The location is # Inserts a newline and a section break at the end of the document body.
              #
              # Section breaks cannot be inserted inside a footnote, header or footer.
              # Because section breaks can only be inserted inside the body, the segment
              # ID field must be
              # empty.
              # immediately before the last newline in the document segment.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;sectionType&quot;: &quot;A String&quot;, # The type of section to insert.
          &quot;location&quot;: { # A particular location in the document. # Inserts a newline and a section break at a specific index in the
              # document.
              #
              # The section break must be inserted inside the bounds of an existing
              # Paragraph. For instance, it cannot be
              # inserted at a table&#x27;s start index (i.e. between the table and its
              # preceding paragraph).
              #
              # Section breaks cannot be inserted inside a table, equation, footnote,
              # header, or footer. Since section breaks can only be inserted inside the
              # body, the segment ID field
              # must be empty.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
        },
        &quot;updateParagraphStyle&quot;: { # Update the styling of all paragraphs that overlap with the given range. # Updates the paragraph style at the specified range.
          &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The styles to set on the paragraphs.
              #
              # Certain paragraph style changes may cause other changes in order to mirror
              # the behavior of the Docs editor. See the documentation of ParagraphStyle for more information.
              #
              # Inherited paragraph styles are represented as unset fields in this message.
              # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
              #
              #   * The ParagraphStyle on a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The ParagraphStyle on a named style
              #     inherits from the normal text named style.
              #   * The ParagraphStyle of the normal text named style inherits
              #     from the default paragraph style in the Docs editor.
              #   * The ParagraphStyle on a Paragraph
              #     element that is contained in a table may inherit its paragraph style from
              #     the table style.
              #
              # If the paragraph style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                #
                # Since updating the named style type affects other properties within
                # ParagraphStyle, the named style type is applied before the other properties
                # are updated.
            &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                # inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                # page or column as the next paragraph if possible. If unset, the value is
                # inherited from the parent.
            &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
            &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                # parent.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                # is inherited from the parent.
            &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
            &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                # inherited.
                #
                # This property is read-only.
              { # A tab stop within a paragraph.
                &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
            &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # The top border is rendered when the paragraph above has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                # inherited from the parent.
                #
                # The bottom border is rendered when the paragraph below has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                # If unset, the value is inherited from the parent.
                #
                # The between border is rendered when the adjacent paragraph has the same
                # border and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;lineSpacing&quot;: 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.
            &quot;spaceAbove&quot;: { # 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.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                # column if possible. If unset, the value is inherited from the parent.
            &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                # heading.
                #
                # This property is read-only.
            &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                # LEFT_TO_RIGHT since
                # paragraph direction is not inherited.
            &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the start of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the end of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;fields&quot;: &quot;A String&quot;, # The fields that should be updated.
              #
              # At least one field must be specified. The root `paragraph_style` is implied
              # and should not be specified.
              #
              # For example, to update the paragraph style&#x27;s alignment property, set
              # `fields` to `&quot;alignment&quot;`.
              #
              # To reset a property to its default value, include its field name in the
              # field mask but leave the field itself unset.
          &quot;range&quot;: { # Specifies a contiguous range of text. # The range overlapping the paragraphs to style.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                # An empty segment ID signifies the document&#x27;s body.
            &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                #
                # In all current uses, a start index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
            &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                #
                # In all current uses, an end index must be provided. This field is an
                # Int32Value in order to accommodate future use cases with open-ended ranges.
          },
        },
        &quot;insertTableColumn&quot;: { # Inserts an empty column into a table. # Inserts an empty column into a table.
          &quot;tableCellLocation&quot;: { # Location of a single cell within a table. # The reference table cell location from which columns will be inserted.
              #
              # A new column will be inserted to the left (or right) of the column where
              # the reference cell is. If the reference cell is a merged cell, a new
              # column will be inserted to the left (or right) of the merged cell.
            &quot;tableStartLocation&quot;: { # A particular location in the document. # The location where the table starts in the document.
              &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                  #
                  # The index is relative to the beginning of the segment specified by
                  # segment_id.
              &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                  # segment ID signifies the document&#x27;s body.
            },
            &quot;rowIndex&quot;: 42, # The zero-based row index. For example, the second row in the table has a
                # row index of 1.
            &quot;columnIndex&quot;: 42, # The zero-based column index. For example, the second column in the table
                # has a column index of 1.
          },
          &quot;insertRight&quot;: True or False, # Whether to insert new column to the right of the reference cell location.
              #
              # - `True`: insert to the right.
              # - `False`: insert to the left.
        },
        &quot;createFooter&quot;: { # Creates a Footer. The new footer is applied to # Creates a footer.
            # the SectionStyle at the location of the
            # SectionBreak if specificed, otherwise
            # it is applied to the DocumentStyle.
            #
            # If a footer of the specified type already exists, a 400 bad request error
            # is returned.
          &quot;sectionBreakLocation&quot;: { # A particular location in the document. # The location of the SectionBreak
              # immediately preceding the section whose SectionStyle this footer should belong to. If this is
              # unset or refers to the first section break in the document, the footer
              # applies to the document style.
            &quot;index&quot;: 42, # The zero-based index, in UTF-16 code units.
                #
                # The index is relative to the beginning of the segment specified by
                # segment_id.
            &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote the location is in. An empty
                # segment ID signifies the document&#x27;s body.
          },
          &quot;type&quot;: &quot;A String&quot;, # The type of footer to create.
        },
      },
    ],
    &quot;writeControl&quot;: { # Provides control over how write requests are executed. # Provides control over how write requests are executed.
      &quot;requiredRevisionId&quot;: &quot;A String&quot;, # The revision ID of the
          # document that the write request will be applied to. If this is not the
          # latest revision of the document, the request will not be processed and
          # will return a 400 bad request error.
          #
          # When a required revision ID is returned in a response, it indicates the
          # revision ID of the document after the request was applied.
      &quot;targetRevisionId&quot;: &quot;A String&quot;, # The target revision ID of the
          # document that the write request will be applied to.
          #
          # If collaborator changes have occurred after the document was read using
          # the API, the changes produced by this write request will be transformed
          # against the collaborator changes. This results in a new revision of the
          # document which incorporates both the changes in the request and the
          # collaborator changes, and the Docs server will resolve conflicting
          # changes. When using `target_revision_id`, the API client can be thought
          # of as another collaborator of the document.
          #
          # The target revision ID may only be used to write to recent versions of a
          # document. If the target revision is too far behind the latest revision,
          # the request will not be processed and will return a 400 bad request error
          # and the request should be retried after reading the latest version of the
          # document. In most cases a `revision_id` will remain valid for use as a
          # target revision for several minutes after it is read, but for
          # frequently-edited documents this window may be shorter.
    },
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message from a BatchUpdateDocument request.
    &quot;documentId&quot;: &quot;A String&quot;, # The ID of the document to which the updates were applied to.
    &quot;writeControl&quot;: { # Provides control over how write requests are executed. # The updated write control after applying the request.
      &quot;requiredRevisionId&quot;: &quot;A String&quot;, # The revision ID of the
          # document that the write request will be applied to. If this is not the
          # latest revision of the document, the request will not be processed and
          # will return a 400 bad request error.
          #
          # When a required revision ID is returned in a response, it indicates the
          # revision ID of the document after the request was applied.
      &quot;targetRevisionId&quot;: &quot;A String&quot;, # The target revision ID of the
          # document that the write request will be applied to.
          #
          # If collaborator changes have occurred after the document was read using
          # the API, the changes produced by this write request will be transformed
          # against the collaborator changes. This results in a new revision of the
          # document which incorporates both the changes in the request and the
          # collaborator changes, and the Docs server will resolve conflicting
          # changes. When using `target_revision_id`, the API client can be thought
          # of as another collaborator of the document.
          #
          # The target revision ID may only be used to write to recent versions of a
          # document. If the target revision is too far behind the latest revision,
          # the request will not be processed and will return a 400 bad request error
          # and the request should be retried after reading the latest version of the
          # document. In most cases a `revision_id` will remain valid for use as a
          # target revision for several minutes after it is read, but for
          # frequently-edited documents this window may be shorter.
    },
    &quot;replies&quot;: [ # The reply of the updates. This maps 1:1 with the updates, although replies
        # to some requests may be empty.
      { # A single response from an update.
        &quot;createHeader&quot;: { # The result of creating a header. # The result of creating a header.
          &quot;headerId&quot;: &quot;A String&quot;, # The ID of the created header.
        },
        &quot;insertInlineSheetsChart&quot;: { # The result of inserting an embedded Google Sheets chart. # The result of inserting an inline Google Sheets chart.
          &quot;objectId&quot;: &quot;A String&quot;, # The object ID of the inserted chart.
        },
        &quot;createNamedRange&quot;: { # The result of creating a named range. # The result of creating a named range.
          &quot;namedRangeId&quot;: &quot;A String&quot;, # The ID of the created named range.
        },
        &quot;replaceAllText&quot;: { # The result of replacing text. # The result of replacing text.
          &quot;occurrencesChanged&quot;: 42, # The number of occurrences changed by replacing all text.
        },
        &quot;insertInlineImage&quot;: { # The result of inserting an inline image. # The result of inserting an inline image.
          &quot;objectId&quot;: &quot;A String&quot;, # The ID of the created InlineObject.
        },
        &quot;createFootnote&quot;: { # The result of creating a footnote. # The result of creating a footnote.
          &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the created footnote.
        },
        &quot;createFooter&quot;: { # The result of creating a footer. # The result of creating a footer.
          &quot;footerId&quot;: &quot;A String&quot;, # The ID of the created footer.
        },
      },
    ],
  }</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a blank document using the title given in the request. Other fields
in the request, including any provided content, are ignored.

Returns the created document.

Args:
  body: object, The request body.
    The object takes the form of:

{ # A Google Docs document.
  &quot;title&quot;: &quot;A String&quot;, # The title of the document.
  &quot;suggestionsViewMode&quot;: &quot;A String&quot;, # Output only. The suggestions view mode applied to the document.
      # 
      # Note: When editing a document, changes must be based on a document with
      # SUGGESTIONS_INLINE.
  &quot;documentId&quot;: &quot;A String&quot;, # Output only. The ID of the document.
  &quot;footers&quot;: { # Output only. The footers in the document, keyed by footer ID.
    &quot;a_key&quot;: { # A document footer.
      &quot;content&quot;: [ # The contents of the footer.
          #
          # The indexes for a footer&#x27;s content begin at zero.
        { # A StructuralElement describes content that provides structure to the
            # document.
          &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
              # table.
            &quot;rows&quot;: 42, # Number of rows in the table.
            &quot;columns&quot;: 42, # Number of columns in the table.
                #
                # It is possible for a table to be non-rectangular, so some rows may have a
                # different number of cells.
            &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
              &quot;tableColumnProperties&quot;: [ # The properties of each column.
                  #
                  # Note that in Docs, tables contain rows and rows contain cells, similar to
                  # HTML. So the properties for a row can be found on the row&#x27;s
                  # table_row_style.
                { # The properties of a column in a table.
                  &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                      # FIXED_WIDTH.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;tableRows&quot;: [ # The contents and style of each row.
              { # The contents and style of a row in a Table.
                &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                  &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                      # at a height equal to or greater than this value in order to show all the
                      # content in the row&#x27;s cells.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a
                      # TableRowStyle.
                    &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # table_row_style_suggestion_state
                        # to see which fields have changed and their new values.
                      &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                          # at a height equal to or greater than this value in order to show all the
                          # content in the row&#x27;s cells.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                    },
                  },
                },
                &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                    #
                    # It is possible for a table to be non-rectangular, so some rows may have a
                    # different number of cells than other rows in the same table.
                  { # The contents and style of a cell in a Table.
                    &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                        #
                        # Inherited table cell styles are represented as unset fields in this message.
                        # A table cell style can inherit from the table&#x27;s style.
                      &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;columnSpan&quot;: 42, # The column span of the cell.
                          #
                          # This property is read-only.
                      &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                          # matches the alignment for newly created table cells in the Docs editor.
                      &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;rowSpan&quot;: 42, # The row span of the cell.
                          #
                          # This property is read-only.
                    },
                    &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                    &quot;content&quot;: [ # The content of the cell.
                      # Object with schema name: StructuralElement
                    ],
                    &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                    &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                        &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # table_cell_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited table cell styles are represented as unset fields in this message.
                            # A table cell style can inherit from the table&#x27;s style.
                          &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;columnSpan&quot;: 42, # The column span of the cell.
                              #
                              # This property is read-only.
                          &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                              # matches the alignment for newly created table cells in the Docs editor.
                          &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;rowSpan&quot;: 42, # The row span of the cell.
                              #
                              # This property is read-only.
                        },
                        &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                          &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                          &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                          &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                          &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                          &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                          &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                          &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                          &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                          &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
              },
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                # multiple insertion IDs if it is a nested suggested change. If empty, then
                # this is not a suggested insertion.
              &quot;A String&quot;,
            ],
          },
          &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
              # a table of contents.
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                # is a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;content&quot;: [ # The content of the table of contents.
              # Object with schema name: StructuralElement
            ],
          },
          &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
              # units.
          &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
              # section break. A section is a range of content which has the same
              # SectionStyle. A section break represents
              # the start of a new section, and the section style applies to the section
              # after the section break.
              #
              # The document body always begins with a section break.
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                # a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
              &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a footer margin is being respected for this
                  # section
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                  # LEFT_TO_RIGHT.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a header margin is being respected for this
                  # section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                  # Updating right margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                  #
                  # If empty, the section contains one column with the default properties in
                  # the Docs editor.
                  # A section can be updated to have no more than three columns.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property will result in a 400 bad request error.
                { # Properties that apply to a section&#x27;s column.
                  &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                  # Updating left margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_footer_id.
                  #
                  # This property is read-only.
              &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the headers on even pages in the section. If it
                  # is false, the headers on even pages uses the default_header_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_header_id.
                  #
                  # This property is read-only.
              &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                  # section. If unset, page numbering continues from the previous section.
                  # If the value is unset in the first
                  # SectionBreak, refer to DocumentStyle&#x27;s
                  # page_number_start.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_header_id.
                  #
                  # This property is read-only.
              &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the footers on even pages in the section. If it
                  # is false, the footers on even pages uses the default_footer_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_footer_id.
                  #
                  # This property is read-only.
              &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                  #
                  # This style can be set even when there is one column in the section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                  # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                  # use_first_page_header_footer for the
                  # first section. If the value is unset for subsequent sectors, it should be
                  # interpreted as false.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the header on the first page of the section. If
                  # it is false, the header on the first page of the section uses the
                  # default_header_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_header_id.
                  #
                  # This property is read-only.
              &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the footer on the first page of the section. If
                  # it is false, the footer on the first page of the section uses the
                  # default_footer_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_footer_id.
                  #
                  # This property is read-only.
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
          },
          &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
              # paragraph. A paragraph is a range of content that is terminated with a
              # newline character.
            &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                # paragraph, keyed by suggestion ID.
              &quot;a_key&quot;: { # A collection of object IDs.
                &quot;objectIds&quot;: [ # The object IDs.
                  &quot;A String&quot;,
                ],
              },
            },
            &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                # belong to a list.
              &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
            },
            &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
              &quot;A String&quot;,
            ],
            &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
              &quot;a_key&quot;: { # A suggested change to a Bullet.
                &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                    # Bullet have been changed in this suggestion.
                    # Bullet have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # list_id.
                  &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # nesting_level.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                },
                &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                    # in this suggestion. This can be used along with the
                    # bullet_suggestion_state to see which
                    # fields have changed and their new values.
                  &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                },
              },
            },
            &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
              { # A ParagraphElement describes content within a
                  # Paragraph.
                &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                    # page break. A page break makes the subsequent text start at the top of the
                    # next page.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a page break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                    # equation.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                    # footnote reference. A footnote reference is the inline content rendered with
                    # a number and is used to identify the footnote.
                  &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                      # contains the content of this footnote reference.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                      # it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                    # an InlineObject.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                      # element contains.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                      # if it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of an inline object element can affect content layout as well as the
                      # styling of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                },
                &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                    # run of text that all has the same styling.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                      # have multiple insertion IDs if it is a nested suggested change. If empty,
                      # then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                      #
                      # Any non-text elements in the run are replaced with the Unicode character
                      # U+E907.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                    # horizontal line.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a horizontal rule can affect content layout as well as the styling
                      # of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                      # is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                    # spot in the text that is dynamically replaced with content that can change
                    # over time, like a page number.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                    # column break. A column break makes the subsequent text start at the top of
                    # the next column.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                      # a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a column break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                    # code units.
              },
            ],
            &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                # suggestion ID.
              &quot;a_key&quot;: { # A suggested change to a
                  # ParagraphStyle.
                &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                  &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                  &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                  &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                  &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                  &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                      # this suggestion.
                      # suggested change. For any field set to true, there is a new suggested value.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                  },
                  &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                  &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                  &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                  &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                  &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                  &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                  &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                  &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                  &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                  &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                  &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                  &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                },
                &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                    # the changes made in this suggestion. This can be used along with the
                    # paragraph_suggestion_state
                    # to see which fields have changed and their new values.
                    #
                    # Inherited paragraph styles are represented as unset fields in this message.
                    # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                    #
                    #   * The ParagraphStyle on a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The ParagraphStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The ParagraphStyle of the normal text named style inherits
                    #     from the default paragraph style in the Docs editor.
                    #   * The ParagraphStyle on a Paragraph
                    #     element that is contained in a table may inherit its paragraph style from
                    #     the table style.
                    #
                    # If the paragraph style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                      #
                      # Since updating the named style type affects other properties within
                      # ParagraphStyle, the named style type is applied before the other properties
                      # are updated.
                  &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                      # inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                      # page or column as the next paragraph if possible. If unset, the value is
                      # inherited from the parent.
                  &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                  &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                      # parent.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                  },
                  &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                      # is inherited from the parent.
                  &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                  &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                      # inherited.
                      #
                      # This property is read-only.
                    { # A tab stop within a paragraph.
                      &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                      &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                  ],
                  &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # The top border is rendered when the paragraph above has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                      # inherited from the parent.
                      #
                      # The bottom border is rendered when the paragraph below has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                      # If unset, the value is inherited from the parent.
                      #
                      # The between border is rendered when the adjacent paragraph has the same
                      # border and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;lineSpacing&quot;: 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.
                  &quot;spaceAbove&quot;: { # 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.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                      # column if possible. If unset, the value is inherited from the parent.
                  &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                      # heading.
                      #
                      # This property is read-only.
                  &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                      # LEFT_TO_RIGHT since
                      # paragraph direction is not inherited.
                  &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the start of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the end of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              },
            },
            &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                #
                # Inherited paragraph styles are represented as unset fields in this message.
                # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                #
                #   * The ParagraphStyle on a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The ParagraphStyle on a named style
                #     inherits from the normal text named style.
                #   * The ParagraphStyle of the normal text named style inherits
                #     from the default paragraph style in the Docs editor.
                #   * The ParagraphStyle on a Paragraph
                #     element that is contained in a table may inherit its paragraph style from
                #     the table style.
                #
                # If the paragraph style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                  #
                  # Since updating the named style type affects other properties within
                  # ParagraphStyle, the named style type is applied before the other properties
                  # are updated.
              &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                  # inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                  # page or column as the next paragraph if possible. If unset, the value is
                  # inherited from the parent.
              &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
              &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                  # parent.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
              },
              &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                  # is inherited from the parent.
              &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
              &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                  # inherited.
                  #
                  # This property is read-only.
                { # A tab stop within a paragraph.
                  &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                  &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # The top border is rendered when the paragraph above has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                  # inherited from the parent.
                  #
                  # The bottom border is rendered when the paragraph below has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                  # If unset, the value is inherited from the parent.
                  #
                  # The between border is rendered when the adjacent paragraph has the same
                  # border and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;lineSpacing&quot;: 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.
              &quot;spaceAbove&quot;: { # 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.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                  # column if possible. If unset, the value is inherited from the parent.
              &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                  # heading.
                  #
                  # This property is read-only.
              &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                  # LEFT_TO_RIGHT since
                  # paragraph direction is not inherited.
              &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the start of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the end of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
          &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
              # code units.
        },
      ],
      &quot;footerId&quot;: &quot;A String&quot;, # The ID of the footer.
    },
  },
  &quot;body&quot;: { # The document body. # Output only. The main body of the document.
      #
      # The body typically contains the full document contents except for
      # headers, footers
      # and footnotes.
    &quot;content&quot;: [ # The contents of the body.
        #
        # The indexes for the body&#x27;s content begin at zero.
      { # A StructuralElement describes content that provides structure to the
          # document.
        &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
            # table.
          &quot;rows&quot;: 42, # Number of rows in the table.
          &quot;columns&quot;: 42, # Number of columns in the table.
              #
              # It is possible for a table to be non-rectangular, so some rows may have a
              # different number of cells.
          &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
            &quot;tableColumnProperties&quot;: [ # The properties of each column.
                #
                # Note that in Docs, tables contain rows and rows contain cells, similar to
                # HTML. So the properties for a row can be found on the row&#x27;s
                # table_row_style.
              { # The properties of a column in a table.
                &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                    # FIXED_WIDTH.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
          },
          &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
              # of this content.
            &quot;A String&quot;,
          ],
          &quot;tableRows&quot;: [ # The contents and style of each row.
            { # The contents and style of a row in a Table.
              &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
              &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                    # at a height equal to or greater than this value in order to show all the
                    # content in the row&#x27;s cells.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # TableRowStyle.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # table_row_style_suggestion_state
                      # to see which fields have changed and their new values.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                  },
                },
              },
              &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells than other rows in the same table.
                { # The contents and style of a cell in a Table.
                  &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                      #
                      # Inherited table cell styles are represented as unset fields in this message.
                      # A table cell style can inherit from the table&#x27;s style.
                    &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                        #
                        # Table cell borders cannot be transparent. To hide a table cell border, make
                        # its width 0.
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                          #
                          # This color cannot be transparent.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                        #
                        # Table cell borders cannot be transparent. To hide a table cell border, make
                        # its width 0.
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                          #
                          # This color cannot be transparent.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                        #
                        # Table cell borders cannot be transparent. To hide a table cell border, make
                        # its width 0.
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                          #
                          # This color cannot be transparent.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                        #
                        # Table cell borders cannot be transparent. To hide a table cell border, make
                        # its width 0.
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                          #
                          # This color cannot be transparent.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;columnSpan&quot;: 42, # The column span of the cell.
                        #
                        # This property is read-only.
                    &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                        # matches the alignment for newly created table cells in the Docs editor.
                    &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;rowSpan&quot;: 42, # The row span of the cell.
                        #
                        # This property is read-only.
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                  &quot;content&quot;: [ # The content of the cell.
                    # Object with schema name: StructuralElement
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                  &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_cell_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                        &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                        &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                        &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                        &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                        &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                        &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                        &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                        &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                        &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                  # may have multiple insertion IDs if it is a nested suggested change. If
                  # empty, then this is not a suggested insertion.
                &quot;A String&quot;,
              ],
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
            },
          ],
          &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
              # multiple insertion IDs if it is a nested suggested change. If empty, then
              # this is not a suggested insertion.
            &quot;A String&quot;,
          ],
        },
        &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
            # a table of contents.
          &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
              # of this content.
            &quot;A String&quot;,
          ],
          &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
              # is a nested suggested change. If empty, then this is not a suggested
              # insertion.
            &quot;A String&quot;,
          ],
          &quot;content&quot;: [ # The content of the table of contents.
            # Object with schema name: StructuralElement
          ],
        },
        &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
            # units.
        &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
            # section break. A section is a range of content which has the same
            # SectionStyle. A section break represents
            # the start of a new section, and the section style applies to the section
            # after the section break.
            #
            # The document body always begins with a section break.
          &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
              # a nested suggested change. If empty, then this is not a suggested
              # insertion.
            &quot;A String&quot;,
          ],
          &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
            &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                # updated, use_custom_header_footer_margins is set
                # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                # DocumentStyle indicates if a footer margin is being respected for this
                # section
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                # LEFT_TO_RIGHT.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                # updated, use_custom_header_footer_margins is set
                # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                # DocumentStyle indicates if a header margin is being respected for this
                # section.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                # Updating right margin causes columns in this section to resize. Since
                # the margin affects column width, it is applied before column properties.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                #
                # If empty, the section contains one column with the default properties in
                # the Docs editor.
                # A section can be updated to have no more than three columns.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property will result in a 400 bad request error.
              { # Properties that apply to a section&#x27;s column.
                &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                # Updating left margin causes columns in this section to resize. Since
                # the margin affects column width, it is applied before column properties.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                # previous SectionBreak&#x27;s SectionStyle.
                # If the value is unset in the first SectionBreak, it inherits from
                # DocumentStyle&#x27;s default_footer_id.
                #
                # This property is read-only.
            &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                # DocumentStyle&#x27;s use_even_page_header_footer is true,
                # this value is used for the headers on even pages in the section. If it
                # is false, the headers on even pages uses the default_header_id. If unset, the value
                # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # even_page_header_id.
                #
                # This property is read-only.
            &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                # section. If unset, page numbering continues from the previous section.
                # If the value is unset in the first
                # SectionBreak, refer to DocumentStyle&#x27;s
                # page_number_start.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                # previous SectionBreak&#x27;s SectionStyle.
                # If the value is unset in the first SectionBreak, it inherits from
                # DocumentStyle&#x27;s default_header_id.
                #
                # This property is read-only.
            &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                # DocumentStyle&#x27;s use_even_page_header_footer is true,
                # this value is used for the footers on even pages in the section. If it
                # is false, the footers on even pages uses the default_footer_id. If unset, the value
                # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # even_page_footer_id.
                #
                # This property is read-only.
            &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                #
                # This style can be set even when there is one column in the section.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                # use_first_page_header_footer for the
                # first section. If the value is unset for subsequent sectors, it should be
                # interpreted as false.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
            &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                # If use_first_page_header_footer is true,
                # this value is used for the header on the first page of the section. If
                # it is false, the header on the first page of the section uses the
                # default_header_id.
                # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # first_page_header_id.
                #
                # This property is read-only.
            &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                # If use_first_page_header_footer is true,
                # this value is used for the footer on the first page of the section. If
                # it is false, the footer on the first page of the section uses the
                # default_footer_id.
                # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                # first_page_footer_id.
                #
                # This property is read-only.
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                #
                # When updating this property, setting a concrete value is required.
                # Unsetting this property results in a 400 bad request error.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
          },
          &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
              # of this content.
            &quot;A String&quot;,
          ],
        },
        &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
            # paragraph. A paragraph is a range of content that is terminated with a
            # newline character.
          &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
              # paragraph, keyed by suggestion ID.
            &quot;a_key&quot;: { # A collection of object IDs.
              &quot;objectIds&quot;: [ # The object IDs.
                &quot;A String&quot;,
              ],
            },
          },
          &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
              # belong to a list.
            &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
            &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                #
                # Inherited text styles are represented as unset fields in this message. A
                # text style&#x27;s parent depends on where the text style is defined:
                #
                #   * The TextStyle of text in a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The TextStyle on a named style
                #     inherits from the normal text named style.
                #   * The TextStyle of the normal text named style inherits
                #     from the default text style in the Docs editor.
                #   * The TextStyle on a Paragraph element
                #     that is contained in a table may inherit its text style from the table
                #     style.
                #
                # If the text style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
              &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
              &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                  # or transparent, depending on the `color` field.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                  #
                  # 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.
                &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                    #
                    # The font family can be any font from the Font menu in Docs or from
                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                    # unrecognized, the text is rendered in `Arial`.
                &quot;weight&quot;: 42, # The weight of the font. 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.
                    #
                    # The default value is `400` (&quot;normal&quot;).
                    #
                    # The font weight makes up just one component of the rendered font weight.
                    # The rendered weight is determined by a combination of the `weight` and the
                    # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                    #
                    # * If the text is bold and the weight is less than `400`, the rendered
                    #   weight is 400.
                    # * If the text is bold and the weight is greater than or equal to `400` but
                    #   is less than `700`, the rendered weight is `700`.
                    # * If the weight is greater than or equal to `700`, the rendered weight is
                    #   equal to the weight.
                    # * If the text is not bold, the rendered weight is equal to the weight.
              },
              &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;italic&quot;: True or False, # Whether or not the text is italicized.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                  # or transparent, depending on the `color` field.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;underline&quot;: True or False, # Whether or not the text is underlined.
              &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                  #   default link color 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 `&quot;ABC\n123&quot;`,
                  #   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.
                &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                &quot;url&quot;: &quot;A String&quot;, # An external URL.
                &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
              },
              &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
              &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
            },
            &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
          },
          &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
            &quot;A String&quot;,
          ],
          &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
            &quot;a_key&quot;: { # A suggested change to a Bullet.
              &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                  # Bullet have been changed in this suggestion.
                  # Bullet have been changed in this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                    # list_id.
                &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                    # nesting_level.
                &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                    # suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                  &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                  &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                  &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                  &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                  &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                  &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                  &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                  &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                  &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                  &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                  # in this suggestion. This can be used along with the
                  # bullet_suggestion_state to see which
                  # fields have changed and their new values.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
            },
          },
          &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
            { # A ParagraphElement describes content within a
                # Paragraph.
              &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                  # page break. A page break makes the subsequent text start at the top of the
                  # next page.
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                    #
                    # Similar to text content, like text runs and footnote references, the text
                    # style of a page break can affect content layout as well as the styling of
                    # text inserted adjacent to it.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
              },
              &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                  # equation.
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
              },
              &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                  # footnote reference. A footnote reference is the inline content rendered with
                  # a number and is used to identify the footnote.
                &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                    # suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                    # contains the content of this footnote reference.
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                    # it is a nested suggested change. If empty, then this is not a suggested
                    # insertion.
                  &quot;A String&quot;,
                ],
              },
              &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                  # an InlineObject.
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                    # element contains.
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                    # if it is a nested suggested change. If empty, then this is not a suggested
                    # insertion.
                  &quot;A String&quot;,
                ],
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                    #
                    # Similar to text content, like text runs and footnote references, the text
                    # style of an inline object element can affect content layout as well as the
                    # styling of text inserted adjacent to it.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                    # ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
              },
              &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                  # run of text that all has the same styling.
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                    # have multiple insertion IDs if it is a nested suggested change. If empty,
                    # then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
                &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                    #
                    # Any non-text elements in the run are replaced with the Unicode character
                    # U+E907.
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
              },
              &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                  # horizontal line.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                    #
                    # Similar to text content, like text runs and footnote references, the text
                    # style of a horizontal rule can affect content layout as well as the styling
                    # of text inserted adjacent to it.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                    # suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                    # is a nested suggested change. If empty, then this is not a suggested
                    # insertion.
                  &quot;A String&quot;,
                ],
              },
              &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                  # spot in the text that is dynamically replaced with content that can change
                  # over time, like a page number.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
              },
              &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                  # column break. A column break makes the subsequent text start at the top of
                  # the next column.
                &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                    # ID.
                  &quot;a_key&quot;: { # A suggested change to a TextStyle.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # text_style_suggestion_state
                        # to see which fields have changed and their new values.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                },
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                    # a nested suggested change. If empty, then this is not a suggested
                    # insertion.
                  &quot;A String&quot;,
                ],
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                    #
                    # Similar to text content, like text runs and footnote references, the text
                    # style of a column break can affect content layout as well as the styling of
                    # text inserted adjacent to it.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
              },
              &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
              &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                  # code units.
            },
          ],
          &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
              # suggestion ID.
            &quot;a_key&quot;: { # A suggested change to a
                # ParagraphStyle.
              &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                    # this suggestion.
                    # suggested change. For any field set to true, there is a new suggested value.
                  &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                },
                &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                  # the changes made in this suggestion. This can be used along with the
                  # paragraph_suggestion_state
                  # to see which fields have changed and their new values.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
          },
          &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
              #
              # Inherited paragraph styles are represented as unset fields in this message.
              # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
              #
              #   * The ParagraphStyle on a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The ParagraphStyle on a named style
              #     inherits from the normal text named style.
              #   * The ParagraphStyle of the normal text named style inherits
              #     from the default paragraph style in the Docs editor.
              #   * The ParagraphStyle on a Paragraph
              #     element that is contained in a table may inherit its paragraph style from
              #     the table style.
              #
              # If the paragraph style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                #
                # Since updating the named style type affects other properties within
                # ParagraphStyle, the named style type is applied before the other properties
                # are updated.
            &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                # inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                # page or column as the next paragraph if possible. If unset, the value is
                # inherited from the parent.
            &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
            &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                # parent.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                # is inherited from the parent.
            &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
            &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                # inherited.
                #
                # This property is read-only.
              { # A tab stop within a paragraph.
                &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
            &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # The top border is rendered when the paragraph above has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                # inherited from the parent.
                #
                # The bottom border is rendered when the paragraph below has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                # If unset, the value is inherited from the parent.
                #
                # The between border is rendered when the adjacent paragraph has the same
                # border and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;lineSpacing&quot;: 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.
            &quot;spaceAbove&quot;: { # 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.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                # column if possible. If unset, the value is inherited from the parent.
            &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                # heading.
                #
                # This property is read-only.
            &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                # LEFT_TO_RIGHT since
                # paragraph direction is not inherited.
            &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the start of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the end of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
        },
        &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
            # code units.
      },
    ],
  },
  &quot;documentStyle&quot;: { # The style of the document. # Output only. The style of the document.
    &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
        # use_even_page_header_footer determines
        # whether to use the default_header_id or this value for the
        # header on even pages. If not set, there is no even page header.
        #
        # This property is read-only.
    &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
        #
        # Updating the left page margin on the document style clears the left page
        # margin on all section styles. It may also cause columns to resize in all
        # sections.
      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
      &quot;magnitude&quot;: 3.14, # The magnitude.
    },
    &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
        # margin_header,
        # SectionStyle
        # margin_header and
        # DocumentStyle
        # margin_footer,
        # SectionStyle
        # margin_footer are
        # respected. When false, the default values in the Docs editor for header and
        # footer margin are used.
        #
        # This property is read-only.
    &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
        # page.
    &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
      &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
    },
    &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
        # footer.
      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
      &quot;magnitude&quot;: 3.14, # The magnitude.
    },
    &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
        # use_even_page_header_footer determines
        # whether to use the default_footer_id or this value for the
        # footer on even pages. If not set, there is no even page footer.
        #
        # This property is read-only.
    &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
        #
        # Updating the bottom page margin on the document style clears the bottom
        # page margin on all section styles.
      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
      &quot;magnitude&quot;: 3.14, # The magnitude.
    },
    &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
        # background color.
      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
            # a transparent color.
          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
          },
        },
      },
    },
    &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
    &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
        #
        # Updating the right page margin on the document style clears the right page
        # margin on all section styles. It may also cause columns to resize in all
        # sections.
      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
      &quot;magnitude&quot;: 3.14, # The magnitude.
    },
    &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
        # pages.
    &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
        #
        # Updating the top page margin on the document style clears the top page
        # margin on all section styles.
      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
      &quot;magnitude&quot;: 3.14, # The magnitude.
    },
    &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
        #
        # This property is read-only.
    &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
        # header.
      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
      &quot;magnitude&quot;: 3.14, # The magnitude.
    },
    &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
        # a unique footer for the first page does not exist. The value of
        # use_first_page_header_footer determines
        # whether to use the default_footer_id or this value for the
        # footer on the first page. If not set, there is no first page footer.
        #
        # This property is read-only.
    &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
        #
        # This property is read-only.
    &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
        # a unique header for the first page does not exist.
        # The value of use_first_page_header_footer determines
        # whether to use the default_header_id or this value for the
        # header on the first page. If not set, there is no first page header.
        #
        # This property is read-only.
  },
  &quot;suggestedDocumentStyleChanges&quot;: { # Output only. The suggested changes to the style of the document, keyed by
      # suggestion ID.
    &quot;a_key&quot;: { # A suggested change to the DocumentStyle.
      &quot;documentStyle&quot;: { # The style of the document. # A DocumentStyle that only includes
          # the changes made in this suggestion. This can be used along with the
          # document_style_suggestion_state
          # to see which fields have changed and their new values.
        &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
            # use_even_page_header_footer determines
            # whether to use the default_header_id or this value for the
            # header on even pages. If not set, there is no even page header.
            #
            # This property is read-only.
        &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
            #
            # Updating the left page margin on the document style clears the left page
            # margin on all section styles. It may also cause columns to resize in all
            # sections.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
            # margin_header,
            # SectionStyle
            # margin_header and
            # DocumentStyle
            # margin_footer,
            # SectionStyle
            # margin_footer are
            # respected. When false, the default values in the Docs editor for header and
            # footer margin are used.
            #
            # This property is read-only.
        &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
            # page.
        &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
          &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
        },
        &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
            # footer.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
            # use_even_page_header_footer determines
            # whether to use the default_footer_id or this value for the
            # footer on even pages. If not set, there is no even page footer.
            #
            # This property is read-only.
        &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
            #
            # Updating the bottom page margin on the document style clears the bottom
            # page margin on all section styles.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
            # background color.
          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                # a transparent color.
              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
              },
            },
          },
        },
        &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
        &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
            #
            # Updating the right page margin on the document style clears the right page
            # margin on all section styles. It may also cause columns to resize in all
            # sections.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
            # pages.
        &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
            #
            # Updating the top page margin on the document style clears the top page
            # margin on all section styles.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
            #
            # This property is read-only.
        &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
            # header.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
            # a unique footer for the first page does not exist. The value of
            # use_first_page_header_footer determines
            # whether to use the default_footer_id or this value for the
            # footer on the first page. If not set, there is no first page footer.
            #
            # This property is read-only.
        &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
            #
            # This property is read-only.
        &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
            # a unique header for the first page does not exist.
            # The value of use_first_page_header_footer determines
            # whether to use the default_header_id or this value for the
            # header on the first page. If not set, there is no first page header.
            #
            # This property is read-only.
      },
      &quot;documentStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion.
          # For any field set to true, there is a new suggested value.
        &quot;useFirstPageHeaderFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to use_first_page_header_footer.
        &quot;firstPageHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to first_page_header_id.
        &quot;marginHeaderSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_header.
        &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
        &quot;evenPageHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to even_page_header_id.
        &quot;evenPageFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to even_page_footer_id.
        &quot;pageSizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
            # suggestion.
            # For any field set to true, the Size has
            # a new suggested value.
          &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
          &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
        },
        &quot;firstPageFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to first_page_footer_id.
        &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
        &quot;pageNumberStartSuggested&quot;: True or False, # Indicates if there was a suggested change to page_number_start.
        &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
        &quot;useEvenPageHeaderFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to use_even_page_header_footer.
        &quot;useCustomHeaderFooterMarginsSuggested&quot;: True or False, # Indicates if there was a suggested change to
            # use_custom_header_footer_margins.
        &quot;backgroundSuggestionState&quot;: { # A mask that indicates which of the fields on the base Background have been changed in this suggestion. # A mask that indicates which of the fields in background have been changed in this
            # suggestion.
            # For any field set to true, the Backgound has a new suggested value.
          &quot;backgroundColorSuggested&quot;: True or False, # Indicates whether the current background color has been modified in this
              # suggestion.
        },
        &quot;defaultHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to default_header_id.
        &quot;marginFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_footer.
        &quot;defaultFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to default_footer_id.
        &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
      },
    },
  },
  &quot;suggestedNamedStylesChanges&quot;: { # Output only. The suggested changes to the named styles of the document,
      # keyed by suggestion ID.
    &quot;a_key&quot;: { # A suggested change to the NamedStyles.
      &quot;namedStyles&quot;: { # The named styles. Paragraphs in the document can inherit their # A NamedStyles that only includes the
          # changes made in this suggestion. This can be used along with the
          # named_styles_suggestion_state to
          # see which fields have changed and their new values.
          # TextStyle and
          # ParagraphStyle from these named styles.
        &quot;styles&quot;: [ # The named styles.
            #
            # There is an entry for each of the possible named style types.
          { # A named style. Paragraphs in the document can inherit their
              # TextStyle and
              # ParagraphStyle from this named style
              # when they have the same named style type.
            &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The paragraph style of this named style.
                #
                # Inherited paragraph styles are represented as unset fields in this message.
                # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                #
                #   * The ParagraphStyle on a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The ParagraphStyle on a named style
                #     inherits from the normal text named style.
                #   * The ParagraphStyle of the normal text named style inherits
                #     from the default paragraph style in the Docs editor.
                #   * The ParagraphStyle on a Paragraph
                #     element that is contained in a table may inherit its paragraph style from
                #     the table style.
                #
                # If the paragraph style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                  #
                  # Since updating the named style type affects other properties within
                  # ParagraphStyle, the named style type is applied before the other properties
                  # are updated.
              &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                  # inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                  # page or column as the next paragraph if possible. If unset, the value is
                  # inherited from the parent.
              &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
              &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                  # parent.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
              },
              &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                  # is inherited from the parent.
              &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
              &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                  # inherited.
                  #
                  # This property is read-only.
                { # A tab stop within a paragraph.
                  &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                  &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # The top border is rendered when the paragraph above has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                  # inherited from the parent.
                  #
                  # The bottom border is rendered when the paragraph below has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                  # If unset, the value is inherited from the parent.
                  #
                  # The between border is rendered when the adjacent paragraph has the same
                  # border and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;lineSpacing&quot;: 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.
              &quot;spaceAbove&quot;: { # 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.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                  # column if possible. If unset, the value is inherited from the parent.
              &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                  # heading.
                  #
                  # This property is read-only.
              &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                  # LEFT_TO_RIGHT since
                  # paragraph direction is not inherited.
              &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the start of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the end of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;namedStyleType&quot;: &quot;A String&quot;, # The type of this named style.
            &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this named style.
                #
                # Inherited text styles are represented as unset fields in this message. A
                # text style&#x27;s parent depends on where the text style is defined:
                #
                #   * The TextStyle of text in a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The TextStyle on a named style
                #     inherits from the normal text named style.
                #   * The TextStyle of the normal text named style inherits
                #     from the default text style in the Docs editor.
                #   * The TextStyle on a Paragraph element
                #     that is contained in a table may inherit its text style from the table
                #     style.
                #
                # If the text style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
              &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
              &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                  # or transparent, depending on the `color` field.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                  #
                  # 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.
                &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                    #
                    # The font family can be any font from the Font menu in Docs or from
                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                    # unrecognized, the text is rendered in `Arial`.
                &quot;weight&quot;: 42, # The weight of the font. 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.
                    #
                    # The default value is `400` (&quot;normal&quot;).
                    #
                    # The font weight makes up just one component of the rendered font weight.
                    # The rendered weight is determined by a combination of the `weight` and the
                    # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                    #
                    # * If the text is bold and the weight is less than `400`, the rendered
                    #   weight is 400.
                    # * If the text is bold and the weight is greater than or equal to `400` but
                    #   is less than `700`, the rendered weight is `700`.
                    # * If the weight is greater than or equal to `700`, the rendered weight is
                    #   equal to the weight.
                    # * If the text is not bold, the rendered weight is equal to the weight.
              },
              &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;italic&quot;: True or False, # Whether or not the text is italicized.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                  # or transparent, depending on the `color` field.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;underline&quot;: True or False, # Whether or not the text is underlined.
              &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                  #   default link color 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 `&quot;ABC\n123&quot;`,
                  #   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.
                &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                &quot;url&quot;: &quot;A String&quot;, # An external URL.
                &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
              },
              &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
              &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
            },
          },
        ],
      },
      &quot;namedStylesSuggestionState&quot;: { # The suggestion state of a NamedStyles # A mask that indicates which of the fields on the base NamedStyles have been changed in this suggestion.
          # message.
        &quot;stylesSuggestionStates&quot;: [ # A mask that indicates which of the fields on the corresponding NamedStyle in styles have been changed in this
            # suggestion.
            #
            # The order of these named style suggestion states match the order of the
            # corresponding named style within the named styles suggestion.
          { # A suggestion state of a NamedStyle message.
            &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                # suggestion.
                # For any field set to true, there is a new suggested value.
              &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
              &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
              &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
              &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
              &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
              &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
              &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
              &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
              &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
              &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
              &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
            },
            &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type that this suggestion state corresponds to.
                #
                # This field is provided as a convenience for matching the
                # NamedStyleSuggestionState with its corresponding NamedStyle.
            &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields in paragraph style have been changed in this
                # suggestion.
                # For any field set to true, there is a new suggested value.
              &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
              &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
              &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
              &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
              &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
              &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
              &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                  # this suggestion.
                  # suggested change. For any field set to true, there is a new suggested value.
                &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
              },
              &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
              &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
              &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
              &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
              &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
              &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
              &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
              &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
              &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
              &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
              &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
              &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
              &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
            },
          },
        ],
      },
    },
  },
  &quot;positionedObjects&quot;: { # Output only. The positioned objects in the document, keyed by object ID.
    &quot;a_key&quot;: { # An object that is tethered to a Paragraph
        # and positioned relative to the beginning of the paragraph. A PositionedObject
        # contains an EmbeddedObject such as an
        # image.
      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
          # of this content.
        &quot;A String&quot;,
      ],
      &quot;objectId&quot;: &quot;A String&quot;, # The ID of this positioned object.
      &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
          # insertion.
      &quot;positionedObjectProperties&quot;: { # Properties of a PositionedObject. # The properties of this positioned object.
        &quot;positioning&quot;: { # The positioning of a PositionedObject. The positioned object is positioned # The positioning of this positioned object relative to the newline of the
            # Paragraph that references this positioned
            # object.
            # relative to the beginning of the Paragraph
            # it is tethered to.
          &quot;leftOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the left edge of the positioned object relative to the
              # beginning of the Paragraph it is tethered
              # to. The exact positioning of the object can depend on other content in the
              # document and the document&#x27;s styling.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;layout&quot;: &quot;A String&quot;, # The layout of this positioned object.
          &quot;topOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the top edge of the positioned object relative to the
              # beginning of the Paragraph it is tethered
              # to. The exact positioning of the object can depend on other content in the
              # document and the document&#x27;s styling.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
        },
        &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this positioned object.
          &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
              # both combined to display alt text.
          &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
            &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect.
            &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
            &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                #
                # The crop rectangle is represented using fractional offsets from the original
                # content&#x27;s four edges.
                #
                # - If the offset is in the interval (0, 1), the corresponding edge of crop
                # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                # - If the offset is negative or greater than 1, the corresponding edge of crop
                # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                # - If all offsets and rotation angle are 0, the image is not cropped.
              &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                  # from the top edge of the original content as a fraction of the original
                  # content&#x27;s height.
              &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                  # from the left edge of the original content as a fraction of the original
                  # content&#x27;s width.
              &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                  # radians. Rotation is applied after the offsets.
              &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                  # is from the right edge of the original content as a fraction of the
                  # original content&#x27;s width.
              &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                  # is from the bottom edge of the original content as a fraction of the
                  # original content&#x27;s height.
            },
            &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                # empty.
            &quot;transparency&quot;: 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.
            &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect.
            &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                # This URI is tagged with the account of the requester. Anyone with the URI
                # effectively accesses the image as the original requester. Access to the
                # image may be lost if the document&#x27;s sharing settings change.
          },
          &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
            &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
              # combined to display alt text.
          &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
          },
          &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
              # a reference to the source Sheets chart when the embedded object is a linked
              # chart.
              #
              # If unset, then the embedded object is not linked.
            &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
              &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
              &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
          },
          &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
        },
      },
      &quot;suggestedPositionedObjectPropertiesChanges&quot;: { # The suggested changes to the positioned object properties, keyed by
          # suggestion ID.
        &quot;a_key&quot;: { # A suggested change to PositionedObjectProperties.
          &quot;positionedObjectPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
              # PositionedObjectProperties have been changed in this
              # suggestion.
              # PositionedObjectProperties
              # have been changed in this suggestion. For any field set to true, there is a
              # new suggested value.
            &quot;positioningSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in positioning have been
                # changed in this suggestion.
                # PositionedObjectPositioning have been changed in this
                # suggestion. For any field set to true, there is a new suggested value.
              &quot;leftOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to left_offset.
              &quot;topOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to top_offset.
              &quot;layoutSuggested&quot;: True or False, # Indicates if there was a suggested change to layout.
            },
            &quot;embeddedObjectSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. # A mask that indicates which of the fields in embedded_object have been
                # changed in this suggestion.
                # For any field set to true, there is a new suggested value.
              &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
              &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
              &quot;descriptionSuggested&quot;: True or False, # Indicates if there was a suggested change to description.
              &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
              &quot;sizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
                  # suggestion.
                  # For any field set to true, the Size has
                  # a new suggested value.
                &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
                &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
              },
              &quot;titleSuggested&quot;: True or False, # Indicates if there was a suggested change to title.
              &quot;linkedContentReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in linked_content_reference have been
                  # changed in this suggestion.
                  # LinkedContentReference have
                  # been changed in this suggestion. For any field set to true, there is a new
                  # suggested value.
                &quot;sheetsChartReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base SheetsChartReference have been changed in this # A mask that indicates which of the fields in sheets_chart_reference have
                    # been changed in this suggestion.
                    # suggestion. For any field set to true, there is a new suggested value.
                  &quot;chartIdSuggested&quot;: True or False, # Indicates if there was a suggested change to chart_id.
                  &quot;spreadsheetIdSuggested&quot;: True or False, # Indicates if there was a suggested change to spreadsheet_id.
                },
              },
              &quot;embeddedDrawingPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in embedded_drawing_properties have been
                  # changed in this suggestion.
                  # EmbeddedDrawingProperties
                  # have been changed in this suggestion. For any field set to true, there is a
                  # new suggested value.
              },
              &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
              &quot;imagePropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. # A mask that indicates which of the fields in image_properties have been changed in
                  # this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;cropPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. # A mask that indicates which of the fields in crop_properties have been changed in
                    # this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                  &quot;offsetTopSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_top.
                  &quot;offsetBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_bottom.
                  &quot;offsetLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_left.
                  &quot;offsetRightSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_right.
                },
                &quot;brightnessSuggested&quot;: True or False, # Indicates if there was a suggested change to brightness.
                &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                &quot;contrastSuggested&quot;: True or False, # Indicates if there was a suggested change to contrast.
                &quot;contentUriSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # content_uri.
                &quot;sourceUriSuggested&quot;: True or False, # Indicates if there was a suggested change to source_uri.
                &quot;transparencySuggested&quot;: True or False, # Indicates if there was a suggested change to transparency.
              },
              &quot;embeddedObjectBorderSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this # A mask that indicates which of the fields in embedded_object_border have been
                  # changed in this suggestion.
                  # suggestion. For any field set to true, there is a new suggested value.
                &quot;propertyStateSuggested&quot;: True or False, # Indicates if there was a suggested change to property_state.
                &quot;colorSuggested&quot;: True or False, # Indicates if there was a suggested change to color.
                &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                &quot;dashStyleSuggested&quot;: True or False, # Indicates if there was a suggested change to dash_style.
              },
            },
          },
          &quot;positionedObjectProperties&quot;: { # Properties of a PositionedObject. # A PositionedObjectProperties that only includes the
              # changes made in this suggestion. This can be used along with the
              # positioned_object_properties_suggestion_state
              # to see which fields have changed and their new values.
            &quot;positioning&quot;: { # The positioning of a PositionedObject. The positioned object is positioned # The positioning of this positioned object relative to the newline of the
                # Paragraph that references this positioned
                # object.
                # relative to the beginning of the Paragraph
                # it is tethered to.
              &quot;leftOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the left edge of the positioned object relative to the
                  # beginning of the Paragraph it is tethered
                  # to. The exact positioning of the object can depend on other content in the
                  # document and the document&#x27;s styling.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;layout&quot;: &quot;A String&quot;, # The layout of this positioned object.
              &quot;topOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the top edge of the positioned object relative to the
                  # beginning of the Paragraph it is tethered
                  # to. The exact positioning of the object can depend on other content in the
                  # document and the document&#x27;s styling.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this positioned object.
              &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                  # both combined to display alt text.
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
                &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect.
                &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
                &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                    #
                    # The crop rectangle is represented using fractional offsets from the original
                    # content&#x27;s four edges.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                    # - If all offsets and rotation angle are 0, the image is not cropped.
                  &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                      # from the top edge of the original content as a fraction of the original
                      # content&#x27;s height.
                  &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                      # from the left edge of the original content as a fraction of the original
                      # content&#x27;s width.
                  &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                      # radians. Rotation is applied after the offsets.
                  &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                      # is from the right edge of the original content as a fraction of the
                      # original content&#x27;s width.
                  &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                      # is from the bottom edge of the original content as a fraction of the
                      # original content&#x27;s height.
                },
                &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                    # empty.
                &quot;transparency&quot;: 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.
                &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect.
                &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                    # This URI is tagged with the account of the requester. Anyone with the URI
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the document&#x27;s sharing settings change.
              },
              &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
                &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                  # combined to display alt text.
              &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
              },
              &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                  # a reference to the source Sheets chart when the embedded object is a linked
                  # chart.
                  #
                  # If unset, then the embedded object is not linked.
                &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                  &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                  &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                      # embedded.
                },
              },
              &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
        },
      },
    },
  },
  &quot;inlineObjects&quot;: { # Output only. The inline objects in the document, keyed by object ID.
    &quot;a_key&quot;: { # An object that appears inline with text. An InlineObject contains
        # an EmbeddedObject such as an image.
      &quot;inlineObjectProperties&quot;: { # Properties of an InlineObject. # The properties of this inline object.
        &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this inline object.
          &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
              # both combined to display alt text.
          &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
            &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect.
            &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
            &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                #
                # The crop rectangle is represented using fractional offsets from the original
                # content&#x27;s four edges.
                #
                # - If the offset is in the interval (0, 1), the corresponding edge of crop
                # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                # - If the offset is negative or greater than 1, the corresponding edge of crop
                # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                # - If all offsets and rotation angle are 0, the image is not cropped.
              &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                  # from the top edge of the original content as a fraction of the original
                  # content&#x27;s height.
              &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                  # from the left edge of the original content as a fraction of the original
                  # content&#x27;s width.
              &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                  # radians. Rotation is applied after the offsets.
              &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                  # is from the right edge of the original content as a fraction of the
                  # original content&#x27;s width.
              &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                  # is from the bottom edge of the original content as a fraction of the
                  # original content&#x27;s height.
            },
            &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                # empty.
            &quot;transparency&quot;: 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.
            &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                # [-1.0, 1.0], where 0 means no effect.
            &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                # This URI is tagged with the account of the requester. Anyone with the URI
                # effectively accesses the image as the original requester. Access to the
                # image may be lost if the document&#x27;s sharing settings change.
          },
          &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
            &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
              # combined to display alt text.
          &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
          },
          &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
              # a reference to the source Sheets chart when the embedded object is a linked
              # chart.
              #
              # If unset, then the embedded object is not linked.
            &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
              &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
              &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                  # embedded.
            },
          },
          &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
        },
      },
      &quot;suggestedInlineObjectPropertiesChanges&quot;: { # The suggested changes to the inline object properties, keyed by suggestion
          # ID.
        &quot;a_key&quot;: { # A suggested change to InlineObjectProperties.
          &quot;inlineObjectProperties&quot;: { # Properties of an InlineObject. # An InlineObjectProperties
              # that only includes the changes made in this suggestion. This can be used
              # along with the inline_object_properties_suggestion_state
              # to see which fields have changed and their new values.
            &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this inline object.
              &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                  # both combined to display alt text.
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
                &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect.
                &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
                &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                    #
                    # The crop rectangle is represented using fractional offsets from the original
                    # content&#x27;s four edges.
                    #
                    # - If the offset is in the interval (0, 1), the corresponding edge of crop
                    # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                    # - If the offset is negative or greater than 1, the corresponding edge of crop
                    # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                    # - If all offsets and rotation angle are 0, the image is not cropped.
                  &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                      # from the top edge of the original content as a fraction of the original
                      # content&#x27;s height.
                  &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                      # from the left edge of the original content as a fraction of the original
                      # content&#x27;s width.
                  &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                      # radians. Rotation is applied after the offsets.
                  &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                      # is from the right edge of the original content as a fraction of the
                      # original content&#x27;s width.
                  &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                      # is from the bottom edge of the original content as a fraction of the
                      # original content&#x27;s height.
                },
                &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                    # empty.
                &quot;transparency&quot;: 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.
                &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                    # [-1.0, 1.0], where 0 means no effect.
                &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                    # This URI is tagged with the account of the requester. Anyone with the URI
                    # effectively accesses the image as the original requester. Access to the
                    # image may be lost if the document&#x27;s sharing settings change.
              },
              &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
                &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                  # combined to display alt text.
              &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
              },
              &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                  # a reference to the source Sheets chart when the embedded object is a linked
                  # chart.
                  #
                  # If unset, then the embedded object is not linked.
                &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                  &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                  &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                      # embedded.
                },
              },
              &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
          &quot;inlineObjectPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
              # InlineObjectProperties have
              # been changed in this suggestion.
              # InlineObjectProperties have
              # been changed in this suggestion. For any field set to true, there is a new
              # suggested value.
            &quot;embeddedObjectSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. # A mask that indicates which of the fields in embedded_object have been
                # changed in this suggestion.
                # For any field set to true, there is a new suggested value.
              &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
              &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
              &quot;descriptionSuggested&quot;: True or False, # Indicates if there was a suggested change to description.
              &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
              &quot;sizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
                  # suggestion.
                  # For any field set to true, the Size has
                  # a new suggested value.
                &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
                &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
              },
              &quot;titleSuggested&quot;: True or False, # Indicates if there was a suggested change to title.
              &quot;linkedContentReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in linked_content_reference have been
                  # changed in this suggestion.
                  # LinkedContentReference have
                  # been changed in this suggestion. For any field set to true, there is a new
                  # suggested value.
                &quot;sheetsChartReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base SheetsChartReference have been changed in this # A mask that indicates which of the fields in sheets_chart_reference have
                    # been changed in this suggestion.
                    # suggestion. For any field set to true, there is a new suggested value.
                  &quot;chartIdSuggested&quot;: True or False, # Indicates if there was a suggested change to chart_id.
                  &quot;spreadsheetIdSuggested&quot;: True or False, # Indicates if there was a suggested change to spreadsheet_id.
                },
              },
              &quot;embeddedDrawingPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in embedded_drawing_properties have been
                  # changed in this suggestion.
                  # EmbeddedDrawingProperties
                  # have been changed in this suggestion. For any field set to true, there is a
                  # new suggested value.
              },
              &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
              &quot;imagePropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. # A mask that indicates which of the fields in image_properties have been changed in
                  # this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;cropPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. # A mask that indicates which of the fields in crop_properties have been changed in
                    # this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                  &quot;offsetTopSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_top.
                  &quot;offsetBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_bottom.
                  &quot;offsetLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_left.
                  &quot;offsetRightSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_right.
                },
                &quot;brightnessSuggested&quot;: True or False, # Indicates if there was a suggested change to brightness.
                &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                &quot;contrastSuggested&quot;: True or False, # Indicates if there was a suggested change to contrast.
                &quot;contentUriSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # content_uri.
                &quot;sourceUriSuggested&quot;: True or False, # Indicates if there was a suggested change to source_uri.
                &quot;transparencySuggested&quot;: True or False, # Indicates if there was a suggested change to transparency.
              },
              &quot;embeddedObjectBorderSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this # A mask that indicates which of the fields in embedded_object_border have been
                  # changed in this suggestion.
                  # suggestion. For any field set to true, there is a new suggested value.
                &quot;propertyStateSuggested&quot;: True or False, # Indicates if there was a suggested change to property_state.
                &quot;colorSuggested&quot;: True or False, # Indicates if there was a suggested change to color.
                &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                &quot;dashStyleSuggested&quot;: True or False, # Indicates if there was a suggested change to dash_style.
              },
            },
          },
        },
      },
      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
          # of this content.
        &quot;A String&quot;,
      ],
      &quot;objectId&quot;: &quot;A String&quot;, # The ID of this inline object.
      &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
          # insertion.
    },
  },
  &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision ID of the document. Can be used in update
      # requests to specify which revision of a document to apply updates to and
      # how the request should behave if the document has been edited since that
      # revision. Only populated if the user has edit access to the document.
      # 
      # 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 document has not changed.
      # Conversely, a changed ID (for the same document and user) usually means the
      # document has been updated; however, a changed ID can also be due to
      # internal factors such as ID format changes.
  &quot;lists&quot;: { # Output only. The lists in the document, keyed by list ID.
    &quot;a_key&quot;: { # A List represents the list attributes for a group of paragraphs that all
        # belong to the same list. A paragraph that is part of a list has a reference
        # to the list&#x27;s ID in its bullet.
      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
          # of this list.
        &quot;A String&quot;,
      ],
      &quot;listProperties&quot;: { # The properties of a list which describe the look # The properties of the list.
          # and feel of bullets belonging to paragraphs associated with a list.
        &quot;nestingLevels&quot;: [ # Describes the properties of the bullets at the associated level.
            #
            # A list has at most nine levels of nesting with nesting level 0
            # corresponding to the top-most level and nesting level 8 corresponding to
            # the most nested level. The nesting levels are returned in ascending order
            # with the least nested returned first.
          { # Contains properties describing the look and feel of a list bullet at a given
              # level of nesting.
            &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of paragraphs at this level of
                # nesting.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;glyphSymbol&quot;: &quot;A String&quot;, # A custom glyph symbol used by bullets when paragraphs at this level of
                # nesting are unordered.
                #
                # The glyph symbol replaces placeholders within the glyph_format. For example, if the
                # glyph_symbol is the solid circle corresponding to Unicode U+25cf code
                # point and the glyph_format is `%0`, the rendered
                # glyph would be the solid circle.
            &quot;glyphFormat&quot;: &quot;A String&quot;, # The format string used by bullets at this level of nesting.
                #
                # The glyph format contains one or more placeholders, and these placeholder
                # are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow
                # the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes
                # and suffixes. Thus, the glyph format follows the pattern
                # `&lt;prefix&gt;%[nesting_level]&lt;suffix&gt;`. Note that the prefix and suffix are
                # optional and can be arbitrary strings.
                #
                # For example, the glyph format `%0.` indicates that the rendered glyph will
                # replace the placeholder with the corresponding glyph for nesting level 0
                # followed by a period as the suffix. So a list with a glyph type of
                # UPPER_ALPHA and
                # glyph format `%0.` at nesting level 0 will result in a list with rendered
                # glyphs
                # &lt;p&gt;`A.`
                # &lt;p&gt;`B.`
                # &lt;p&gt;`C.`
                #
                # The glyph format can contain placeholders for the current nesting level as
                # well as placeholders for parent nesting levels. For example, a
                # list can have a glyph format of `%0.` at nesting level 0 and a
                # glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels
                # have DECIMAL glyph
                # types, this would result in a list with rendered glyphs
                # &lt;p&gt;`1.`
                # &lt;p&gt;`2.`
                # &lt;p&gt;`  2.1.`
                # &lt;p&gt;`  2.2.`
                # &lt;p&gt;`3.`
                #
                # For nesting levels that are ordered, the string that replaces a placeholder
                # in the glyph format for a particular paragraph depends on the paragraph&#x27;s
                # order within the list.
            &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of bullets at this level of nesting.
                #
                # Inherited text styles are represented as unset fields in this message. A
                # text style&#x27;s parent depends on where the text style is defined:
                #
                #   * The TextStyle of text in a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The TextStyle on a named style
                #     inherits from the normal text named style.
                #   * The TextStyle of the normal text named style inherits
                #     from the default text style in the Docs editor.
                #   * The TextStyle on a Paragraph element
                #     that is contained in a table may inherit its text style from the table
                #     style.
                #
                # If the text style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
              &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
              &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                  # or transparent, depending on the `color` field.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                  #
                  # 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.
                &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                    #
                    # The font family can be any font from the Font menu in Docs or from
                    # [Google Fonts] (https://fonts.google.com/). If the font name is
                    # unrecognized, the text is rendered in `Arial`.
                &quot;weight&quot;: 42, # The weight of the font. 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.
                    #
                    # The default value is `400` (&quot;normal&quot;).
                    #
                    # The font weight makes up just one component of the rendered font weight.
                    # The rendered weight is determined by a combination of the `weight` and the
                    # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                    #
                    # * If the text is bold and the weight is less than `400`, the rendered
                    #   weight is 400.
                    # * If the text is bold and the weight is greater than or equal to `400` but
                    #   is less than `700`, the rendered weight is `700`.
                    # * If the weight is greater than or equal to `700`, the rendered weight is
                    #   equal to the weight.
                    # * If the text is not bold, the rendered weight is equal to the weight.
              },
              &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;italic&quot;: True or False, # Whether or not the text is italicized.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                  # or transparent, depending on the `color` field.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;underline&quot;: True or False, # Whether or not the text is underlined.
              &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                  #   default link color 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 `&quot;ABC\n123&quot;`,
                  #   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.
                &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                &quot;url&quot;: &quot;A String&quot;, # An external URL.
                &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
              },
              &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
              &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
            },
            &quot;startNumber&quot;: 42, # The number of the first list item at this nesting level.
                #
                # A value of 0 is treated as a value of 1 for lettered lists and roman
                # numeraled lists, i.e. for values of both 0 and 1, lettered and roman
                # numeraled lists will begin at `a` and `i` respectively.
                #
                # This value is ignored for nesting levels with unordered glyphs.
            &quot;bulletAlignment&quot;: &quot;A String&quot;, # The alignment of the bullet within the space allotted for rendering the
                # bullet.
            &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for paragraphs at this level of nesting. Applied
                # to the side that corresponds to the start of the text, based on the
                # paragraph&#x27;s content direction.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;glyphType&quot;: &quot;A String&quot;, # The type of glyph used by bullets when paragraphs at this level of
                # nesting are ordered.
                #
                # The glyph type determines the type of glyph used to replace placeholders
                # within the glyph_format
                # when paragraphs at this level of nesting are ordered. For example, if the
                # nesting level is 0, the glyph_format is `%0.` and the glyph
                # type is DECIMAL,
                # then the rendered glyph would replace the placeholder `%0` in the glyph
                # format with a number corresponding to list item&#x27;s order within the list.
          },
        ],
      },
      &quot;suggestedListPropertiesChanges&quot;: { # The suggested changes to the list properties, keyed by suggestion
          # ID.
        &quot;a_key&quot;: { # A suggested change to ListProperties.
          &quot;listProperties&quot;: { # The properties of a list which describe the look # A ListProperties that only includes
              # the changes made in this suggestion. This can be used along with the
              # list_properties_suggestion_state
              # to see which fields have changed and their new values.
              # and feel of bullets belonging to paragraphs associated with a list.
            &quot;nestingLevels&quot;: [ # Describes the properties of the bullets at the associated level.
                #
                # A list has at most nine levels of nesting with nesting level 0
                # corresponding to the top-most level and nesting level 8 corresponding to
                # the most nested level. The nesting levels are returned in ascending order
                # with the least nested returned first.
              { # Contains properties describing the look and feel of a list bullet at a given
                  # level of nesting.
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of paragraphs at this level of
                    # nesting.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;glyphSymbol&quot;: &quot;A String&quot;, # A custom glyph symbol used by bullets when paragraphs at this level of
                    # nesting are unordered.
                    #
                    # The glyph symbol replaces placeholders within the glyph_format. For example, if the
                    # glyph_symbol is the solid circle corresponding to Unicode U+25cf code
                    # point and the glyph_format is `%0`, the rendered
                    # glyph would be the solid circle.
                &quot;glyphFormat&quot;: &quot;A String&quot;, # The format string used by bullets at this level of nesting.
                    #
                    # The glyph format contains one or more placeholders, and these placeholder
                    # are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow
                    # the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes
                    # and suffixes. Thus, the glyph format follows the pattern
                    # `&lt;prefix&gt;%[nesting_level]&lt;suffix&gt;`. Note that the prefix and suffix are
                    # optional and can be arbitrary strings.
                    #
                    # For example, the glyph format `%0.` indicates that the rendered glyph will
                    # replace the placeholder with the corresponding glyph for nesting level 0
                    # followed by a period as the suffix. So a list with a glyph type of
                    # UPPER_ALPHA and
                    # glyph format `%0.` at nesting level 0 will result in a list with rendered
                    # glyphs
                    # &lt;p&gt;`A.`
                    # &lt;p&gt;`B.`
                    # &lt;p&gt;`C.`
                    #
                    # The glyph format can contain placeholders for the current nesting level as
                    # well as placeholders for parent nesting levels. For example, a
                    # list can have a glyph format of `%0.` at nesting level 0 and a
                    # glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels
                    # have DECIMAL glyph
                    # types, this would result in a list with rendered glyphs
                    # &lt;p&gt;`1.`
                    # &lt;p&gt;`2.`
                    # &lt;p&gt;`  2.1.`
                    # &lt;p&gt;`  2.2.`
                    # &lt;p&gt;`3.`
                    #
                    # For nesting levels that are ordered, the string that replaces a placeholder
                    # in the glyph format for a particular paragraph depends on the paragraph&#x27;s
                    # order within the list.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of bullets at this level of nesting.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;startNumber&quot;: 42, # The number of the first list item at this nesting level.
                    #
                    # A value of 0 is treated as a value of 1 for lettered lists and roman
                    # numeraled lists, i.e. for values of both 0 and 1, lettered and roman
                    # numeraled lists will begin at `a` and `i` respectively.
                    #
                    # This value is ignored for nesting levels with unordered glyphs.
                &quot;bulletAlignment&quot;: &quot;A String&quot;, # The alignment of the bullet within the space allotted for rendering the
                    # bullet.
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for paragraphs at this level of nesting. Applied
                    # to the side that corresponds to the start of the text, based on the
                    # paragraph&#x27;s content direction.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;glyphType&quot;: &quot;A String&quot;, # The type of glyph used by bullets when paragraphs at this level of
                    # nesting are ordered.
                    #
                    # The glyph type determines the type of glyph used to replace placeholders
                    # within the glyph_format
                    # when paragraphs at this level of nesting are ordered. For example, if the
                    # nesting level is 0, the glyph_format is `%0.` and the glyph
                    # type is DECIMAL,
                    # then the rendered glyph would replace the placeholder `%0` in the glyph
                    # format with a number corresponding to list item&#x27;s order within the list.
              },
            ],
          },
          &quot;listPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion. # A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion.
              # For any field set to true, there is a new suggested value.
            &quot;nestingLevelsSuggestionStates&quot;: [ # A mask that indicates which of the fields on the corresponding
                # NestingLevel in nesting_levels have been changed in
                # this suggestion.
                #
                # The nesting level suggestion states are returned in ascending order of the
                # nesting level with the least nested returned first.
              { # A mask that indicates which of the fields on the base NestingLevel have been changed in this suggestion. For
                  # any field set to true, there is a new suggested value.
                &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # indent_first_line.
                &quot;bulletAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # bullet_alignment.
                &quot;glyphSymbolSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # glyph_symbol.
                &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                    # suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                  &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                  &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                  &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                  &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                  &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                  &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                  &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                  &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                  &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                  &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                },
                &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # indent_start.
                &quot;glyphFormatSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # glyph_format.
                &quot;startNumberSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # start_number.
                &quot;glyphTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to
                    # glyph_type.
              },
            ],
          },
        },
      },
      &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
          # insertion.
    },
  },
  &quot;headers&quot;: { # Output only. The headers in the document, keyed by header ID.
    &quot;a_key&quot;: { # A document header.
      &quot;headerId&quot;: &quot;A String&quot;, # The ID of the header.
      &quot;content&quot;: [ # The contents of the header.
          #
          # The indexes for a header&#x27;s content begin at zero.
        { # A StructuralElement describes content that provides structure to the
            # document.
          &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
              # table.
            &quot;rows&quot;: 42, # Number of rows in the table.
            &quot;columns&quot;: 42, # Number of columns in the table.
                #
                # It is possible for a table to be non-rectangular, so some rows may have a
                # different number of cells.
            &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
              &quot;tableColumnProperties&quot;: [ # The properties of each column.
                  #
                  # Note that in Docs, tables contain rows and rows contain cells, similar to
                  # HTML. So the properties for a row can be found on the row&#x27;s
                  # table_row_style.
                { # The properties of a column in a table.
                  &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                      # FIXED_WIDTH.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;tableRows&quot;: [ # The contents and style of each row.
              { # The contents and style of a row in a Table.
                &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                  &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                      # at a height equal to or greater than this value in order to show all the
                      # content in the row&#x27;s cells.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a
                      # TableRowStyle.
                    &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # table_row_style_suggestion_state
                        # to see which fields have changed and their new values.
                      &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                          # at a height equal to or greater than this value in order to show all the
                          # content in the row&#x27;s cells.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                    },
                  },
                },
                &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                    #
                    # It is possible for a table to be non-rectangular, so some rows may have a
                    # different number of cells than other rows in the same table.
                  { # The contents and style of a cell in a Table.
                    &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                        #
                        # Inherited table cell styles are represented as unset fields in this message.
                        # A table cell style can inherit from the table&#x27;s style.
                      &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;columnSpan&quot;: 42, # The column span of the cell.
                          #
                          # This property is read-only.
                      &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                          # matches the alignment for newly created table cells in the Docs editor.
                      &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;rowSpan&quot;: 42, # The row span of the cell.
                          #
                          # This property is read-only.
                    },
                    &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                    &quot;content&quot;: [ # The content of the cell.
                      # Object with schema name: StructuralElement
                    ],
                    &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                    &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                        &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # table_cell_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited table cell styles are represented as unset fields in this message.
                            # A table cell style can inherit from the table&#x27;s style.
                          &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;columnSpan&quot;: 42, # The column span of the cell.
                              #
                              # This property is read-only.
                          &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                              # matches the alignment for newly created table cells in the Docs editor.
                          &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;rowSpan&quot;: 42, # The row span of the cell.
                              #
                              # This property is read-only.
                        },
                        &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                          &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                          &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                          &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                          &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                          &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                          &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                          &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                          &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                          &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
              },
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                # multiple insertion IDs if it is a nested suggested change. If empty, then
                # this is not a suggested insertion.
              &quot;A String&quot;,
            ],
          },
          &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
              # a table of contents.
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                # is a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;content&quot;: [ # The content of the table of contents.
              # Object with schema name: StructuralElement
            ],
          },
          &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
              # units.
          &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
              # section break. A section is a range of content which has the same
              # SectionStyle. A section break represents
              # the start of a new section, and the section style applies to the section
              # after the section break.
              #
              # The document body always begins with a section break.
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                # a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
              &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a footer margin is being respected for this
                  # section
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                  # LEFT_TO_RIGHT.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a header margin is being respected for this
                  # section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                  # Updating right margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                  #
                  # If empty, the section contains one column with the default properties in
                  # the Docs editor.
                  # A section can be updated to have no more than three columns.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property will result in a 400 bad request error.
                { # Properties that apply to a section&#x27;s column.
                  &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                  # Updating left margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_footer_id.
                  #
                  # This property is read-only.
              &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the headers on even pages in the section. If it
                  # is false, the headers on even pages uses the default_header_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_header_id.
                  #
                  # This property is read-only.
              &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                  # section. If unset, page numbering continues from the previous section.
                  # If the value is unset in the first
                  # SectionBreak, refer to DocumentStyle&#x27;s
                  # page_number_start.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_header_id.
                  #
                  # This property is read-only.
              &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the footers on even pages in the section. If it
                  # is false, the footers on even pages uses the default_footer_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_footer_id.
                  #
                  # This property is read-only.
              &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                  #
                  # This style can be set even when there is one column in the section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                  # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                  # use_first_page_header_footer for the
                  # first section. If the value is unset for subsequent sectors, it should be
                  # interpreted as false.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the header on the first page of the section. If
                  # it is false, the header on the first page of the section uses the
                  # default_header_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_header_id.
                  #
                  # This property is read-only.
              &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the footer on the first page of the section. If
                  # it is false, the footer on the first page of the section uses the
                  # default_footer_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_footer_id.
                  #
                  # This property is read-only.
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
          },
          &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
              # paragraph. A paragraph is a range of content that is terminated with a
              # newline character.
            &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                # paragraph, keyed by suggestion ID.
              &quot;a_key&quot;: { # A collection of object IDs.
                &quot;objectIds&quot;: [ # The object IDs.
                  &quot;A String&quot;,
                ],
              },
            },
            &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                # belong to a list.
              &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
            },
            &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
              &quot;A String&quot;,
            ],
            &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
              &quot;a_key&quot;: { # A suggested change to a Bullet.
                &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                    # Bullet have been changed in this suggestion.
                    # Bullet have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # list_id.
                  &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # nesting_level.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                },
                &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                    # in this suggestion. This can be used along with the
                    # bullet_suggestion_state to see which
                    # fields have changed and their new values.
                  &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                },
              },
            },
            &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
              { # A ParagraphElement describes content within a
                  # Paragraph.
                &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                    # page break. A page break makes the subsequent text start at the top of the
                    # next page.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a page break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                    # equation.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                    # footnote reference. A footnote reference is the inline content rendered with
                    # a number and is used to identify the footnote.
                  &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                      # contains the content of this footnote reference.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                      # it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                    # an InlineObject.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                      # element contains.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                      # if it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of an inline object element can affect content layout as well as the
                      # styling of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                },
                &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                    # run of text that all has the same styling.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                      # have multiple insertion IDs if it is a nested suggested change. If empty,
                      # then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                      #
                      # Any non-text elements in the run are replaced with the Unicode character
                      # U+E907.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                    # horizontal line.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a horizontal rule can affect content layout as well as the styling
                      # of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                      # is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                    # spot in the text that is dynamically replaced with content that can change
                    # over time, like a page number.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                    # column break. A column break makes the subsequent text start at the top of
                    # the next column.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                      # a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a column break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                    # code units.
              },
            ],
            &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                # suggestion ID.
              &quot;a_key&quot;: { # A suggested change to a
                  # ParagraphStyle.
                &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                  &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                  &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                  &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                  &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                  &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                      # this suggestion.
                      # suggested change. For any field set to true, there is a new suggested value.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                  },
                  &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                  &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                  &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                  &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                  &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                  &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                  &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                  &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                  &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                  &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                  &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                  &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                },
                &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                    # the changes made in this suggestion. This can be used along with the
                    # paragraph_suggestion_state
                    # to see which fields have changed and their new values.
                    #
                    # Inherited paragraph styles are represented as unset fields in this message.
                    # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                    #
                    #   * The ParagraphStyle on a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The ParagraphStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The ParagraphStyle of the normal text named style inherits
                    #     from the default paragraph style in the Docs editor.
                    #   * The ParagraphStyle on a Paragraph
                    #     element that is contained in a table may inherit its paragraph style from
                    #     the table style.
                    #
                    # If the paragraph style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                      #
                      # Since updating the named style type affects other properties within
                      # ParagraphStyle, the named style type is applied before the other properties
                      # are updated.
                  &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                      # inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                      # page or column as the next paragraph if possible. If unset, the value is
                      # inherited from the parent.
                  &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                  &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                      # parent.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                  },
                  &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                      # is inherited from the parent.
                  &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                  &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                      # inherited.
                      #
                      # This property is read-only.
                    { # A tab stop within a paragraph.
                      &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                      &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                  ],
                  &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # The top border is rendered when the paragraph above has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                      # inherited from the parent.
                      #
                      # The bottom border is rendered when the paragraph below has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                      # If unset, the value is inherited from the parent.
                      #
                      # The between border is rendered when the adjacent paragraph has the same
                      # border and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;lineSpacing&quot;: 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.
                  &quot;spaceAbove&quot;: { # 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.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                      # column if possible. If unset, the value is inherited from the parent.
                  &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                      # heading.
                      #
                      # This property is read-only.
                  &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                      # LEFT_TO_RIGHT since
                      # paragraph direction is not inherited.
                  &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the start of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the end of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              },
            },
            &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                #
                # Inherited paragraph styles are represented as unset fields in this message.
                # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                #
                #   * The ParagraphStyle on a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The ParagraphStyle on a named style
                #     inherits from the normal text named style.
                #   * The ParagraphStyle of the normal text named style inherits
                #     from the default paragraph style in the Docs editor.
                #   * The ParagraphStyle on a Paragraph
                #     element that is contained in a table may inherit its paragraph style from
                #     the table style.
                #
                # If the paragraph style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                  #
                  # Since updating the named style type affects other properties within
                  # ParagraphStyle, the named style type is applied before the other properties
                  # are updated.
              &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                  # inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                  # page or column as the next paragraph if possible. If unset, the value is
                  # inherited from the parent.
              &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
              &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                  # parent.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
              },
              &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                  # is inherited from the parent.
              &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
              &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                  # inherited.
                  #
                  # This property is read-only.
                { # A tab stop within a paragraph.
                  &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                  &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # The top border is rendered when the paragraph above has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                  # inherited from the parent.
                  #
                  # The bottom border is rendered when the paragraph below has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                  # If unset, the value is inherited from the parent.
                  #
                  # The between border is rendered when the adjacent paragraph has the same
                  # border and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;lineSpacing&quot;: 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.
              &quot;spaceAbove&quot;: { # 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.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                  # column if possible. If unset, the value is inherited from the parent.
              &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                  # heading.
                  #
                  # This property is read-only.
              &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                  # LEFT_TO_RIGHT since
                  # paragraph direction is not inherited.
              &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the start of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the end of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
          &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
              # code units.
        },
      ],
    },
  },
  &quot;footnotes&quot;: { # Output only. The footnotes in the document, keyed by footnote ID.
    &quot;a_key&quot;: { # A document footnote.
      &quot;content&quot;: [ # The contents of the footnote.
          #
          # The indexes for a footnote&#x27;s content begin at zero.
        { # A StructuralElement describes content that provides structure to the
            # document.
          &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
              # table.
            &quot;rows&quot;: 42, # Number of rows in the table.
            &quot;columns&quot;: 42, # Number of columns in the table.
                #
                # It is possible for a table to be non-rectangular, so some rows may have a
                # different number of cells.
            &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
              &quot;tableColumnProperties&quot;: [ # The properties of each column.
                  #
                  # Note that in Docs, tables contain rows and rows contain cells, similar to
                  # HTML. So the properties for a row can be found on the row&#x27;s
                  # table_row_style.
                { # The properties of a column in a table.
                  &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                      # FIXED_WIDTH.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;tableRows&quot;: [ # The contents and style of each row.
              { # The contents and style of a row in a Table.
                &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                  &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                      # at a height equal to or greater than this value in order to show all the
                      # content in the row&#x27;s cells.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a
                      # TableRowStyle.
                    &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # table_row_style_suggestion_state
                        # to see which fields have changed and their new values.
                      &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                          # at a height equal to or greater than this value in order to show all the
                          # content in the row&#x27;s cells.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                    },
                  },
                },
                &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                    #
                    # It is possible for a table to be non-rectangular, so some rows may have a
                    # different number of cells than other rows in the same table.
                  { # The contents and style of a cell in a Table.
                    &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                        #
                        # Inherited table cell styles are represented as unset fields in this message.
                        # A table cell style can inherit from the table&#x27;s style.
                      &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;columnSpan&quot;: 42, # The column span of the cell.
                          #
                          # This property is read-only.
                      &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                          # matches the alignment for newly created table cells in the Docs editor.
                      &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;rowSpan&quot;: 42, # The row span of the cell.
                          #
                          # This property is read-only.
                    },
                    &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                    &quot;content&quot;: [ # The content of the cell.
                      # Object with schema name: StructuralElement
                    ],
                    &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                    &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                        &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # table_cell_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited table cell styles are represented as unset fields in this message.
                            # A table cell style can inherit from the table&#x27;s style.
                          &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;columnSpan&quot;: 42, # The column span of the cell.
                              #
                              # This property is read-only.
                          &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                              # matches the alignment for newly created table cells in the Docs editor.
                          &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;rowSpan&quot;: 42, # The row span of the cell.
                              #
                              # This property is read-only.
                        },
                        &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                          &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                          &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                          &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                          &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                          &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                          &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                          &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                          &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                          &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
              },
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                # multiple insertion IDs if it is a nested suggested change. If empty, then
                # this is not a suggested insertion.
              &quot;A String&quot;,
            ],
          },
          &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
              # a table of contents.
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                # is a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;content&quot;: [ # The content of the table of contents.
              # Object with schema name: StructuralElement
            ],
          },
          &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
              # units.
          &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
              # section break. A section is a range of content which has the same
              # SectionStyle. A section break represents
              # the start of a new section, and the section style applies to the section
              # after the section break.
              #
              # The document body always begins with a section break.
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                # a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
              &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a footer margin is being respected for this
                  # section
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                  # LEFT_TO_RIGHT.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a header margin is being respected for this
                  # section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                  # Updating right margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                  #
                  # If empty, the section contains one column with the default properties in
                  # the Docs editor.
                  # A section can be updated to have no more than three columns.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property will result in a 400 bad request error.
                { # Properties that apply to a section&#x27;s column.
                  &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                  # Updating left margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_footer_id.
                  #
                  # This property is read-only.
              &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the headers on even pages in the section. If it
                  # is false, the headers on even pages uses the default_header_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_header_id.
                  #
                  # This property is read-only.
              &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                  # section. If unset, page numbering continues from the previous section.
                  # If the value is unset in the first
                  # SectionBreak, refer to DocumentStyle&#x27;s
                  # page_number_start.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_header_id.
                  #
                  # This property is read-only.
              &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the footers on even pages in the section. If it
                  # is false, the footers on even pages uses the default_footer_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_footer_id.
                  #
                  # This property is read-only.
              &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                  #
                  # This style can be set even when there is one column in the section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                  # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                  # use_first_page_header_footer for the
                  # first section. If the value is unset for subsequent sectors, it should be
                  # interpreted as false.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the header on the first page of the section. If
                  # it is false, the header on the first page of the section uses the
                  # default_header_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_header_id.
                  #
                  # This property is read-only.
              &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the footer on the first page of the section. If
                  # it is false, the footer on the first page of the section uses the
                  # default_footer_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_footer_id.
                  #
                  # This property is read-only.
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
          },
          &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
              # paragraph. A paragraph is a range of content that is terminated with a
              # newline character.
            &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                # paragraph, keyed by suggestion ID.
              &quot;a_key&quot;: { # A collection of object IDs.
                &quot;objectIds&quot;: [ # The object IDs.
                  &quot;A String&quot;,
                ],
              },
            },
            &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                # belong to a list.
              &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
            },
            &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
              &quot;A String&quot;,
            ],
            &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
              &quot;a_key&quot;: { # A suggested change to a Bullet.
                &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                    # Bullet have been changed in this suggestion.
                    # Bullet have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # list_id.
                  &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # nesting_level.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                },
                &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                    # in this suggestion. This can be used along with the
                    # bullet_suggestion_state to see which
                    # fields have changed and their new values.
                  &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                },
              },
            },
            &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
              { # A ParagraphElement describes content within a
                  # Paragraph.
                &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                    # page break. A page break makes the subsequent text start at the top of the
                    # next page.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a page break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                    # equation.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                    # footnote reference. A footnote reference is the inline content rendered with
                    # a number and is used to identify the footnote.
                  &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                      # contains the content of this footnote reference.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                      # it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                    # an InlineObject.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                      # element contains.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                      # if it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of an inline object element can affect content layout as well as the
                      # styling of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                },
                &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                    # run of text that all has the same styling.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                      # have multiple insertion IDs if it is a nested suggested change. If empty,
                      # then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                      #
                      # Any non-text elements in the run are replaced with the Unicode character
                      # U+E907.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                    # horizontal line.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a horizontal rule can affect content layout as well as the styling
                      # of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                      # is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                    # spot in the text that is dynamically replaced with content that can change
                    # over time, like a page number.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                    # column break. A column break makes the subsequent text start at the top of
                    # the next column.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                      # a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a column break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                    # code units.
              },
            ],
            &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                # suggestion ID.
              &quot;a_key&quot;: { # A suggested change to a
                  # ParagraphStyle.
                &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                  &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                  &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                  &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                  &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                  &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                      # this suggestion.
                      # suggested change. For any field set to true, there is a new suggested value.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                  },
                  &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                  &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                  &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                  &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                  &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                  &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                  &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                  &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                  &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                  &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                  &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                  &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                },
                &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                    # the changes made in this suggestion. This can be used along with the
                    # paragraph_suggestion_state
                    # to see which fields have changed and their new values.
                    #
                    # Inherited paragraph styles are represented as unset fields in this message.
                    # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                    #
                    #   * The ParagraphStyle on a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The ParagraphStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The ParagraphStyle of the normal text named style inherits
                    #     from the default paragraph style in the Docs editor.
                    #   * The ParagraphStyle on a Paragraph
                    #     element that is contained in a table may inherit its paragraph style from
                    #     the table style.
                    #
                    # If the paragraph style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                      #
                      # Since updating the named style type affects other properties within
                      # ParagraphStyle, the named style type is applied before the other properties
                      # are updated.
                  &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                      # inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                      # page or column as the next paragraph if possible. If unset, the value is
                      # inherited from the parent.
                  &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                  &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                      # parent.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                  },
                  &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                      # is inherited from the parent.
                  &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                  &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                      # inherited.
                      #
                      # This property is read-only.
                    { # A tab stop within a paragraph.
                      &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                      &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                  ],
                  &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # The top border is rendered when the paragraph above has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                      # inherited from the parent.
                      #
                      # The bottom border is rendered when the paragraph below has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                      # If unset, the value is inherited from the parent.
                      #
                      # The between border is rendered when the adjacent paragraph has the same
                      # border and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;lineSpacing&quot;: 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.
                  &quot;spaceAbove&quot;: { # 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.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                      # column if possible. If unset, the value is inherited from the parent.
                  &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                      # heading.
                      #
                      # This property is read-only.
                  &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                      # LEFT_TO_RIGHT since
                      # paragraph direction is not inherited.
                  &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the start of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the end of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              },
            },
            &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                #
                # Inherited paragraph styles are represented as unset fields in this message.
                # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                #
                #   * The ParagraphStyle on a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The ParagraphStyle on a named style
                #     inherits from the normal text named style.
                #   * The ParagraphStyle of the normal text named style inherits
                #     from the default paragraph style in the Docs editor.
                #   * The ParagraphStyle on a Paragraph
                #     element that is contained in a table may inherit its paragraph style from
                #     the table style.
                #
                # If the paragraph style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                  #
                  # Since updating the named style type affects other properties within
                  # ParagraphStyle, the named style type is applied before the other properties
                  # are updated.
              &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                  # inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                  # page or column as the next paragraph if possible. If unset, the value is
                  # inherited from the parent.
              &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
              &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                  # parent.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
              },
              &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                  # is inherited from the parent.
              &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
              &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                  # inherited.
                  #
                  # This property is read-only.
                { # A tab stop within a paragraph.
                  &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                  &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # The top border is rendered when the paragraph above has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                  # inherited from the parent.
                  #
                  # The bottom border is rendered when the paragraph below has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                  # If unset, the value is inherited from the parent.
                  #
                  # The between border is rendered when the adjacent paragraph has the same
                  # border and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;lineSpacing&quot;: 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.
              &quot;spaceAbove&quot;: { # 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.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                  # column if possible. If unset, the value is inherited from the parent.
              &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                  # heading.
                  #
                  # This property is read-only.
              &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                  # LEFT_TO_RIGHT since
                  # paragraph direction is not inherited.
              &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the start of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the end of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
          &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
              # code units.
        },
      ],
      &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote.
    },
  },
  &quot;namedStyles&quot;: { # The named styles. Paragraphs in the document can inherit their # Output only. The named styles of the document.
      # TextStyle and
      # ParagraphStyle from these named styles.
    &quot;styles&quot;: [ # The named styles.
        #
        # There is an entry for each of the possible named style types.
      { # A named style. Paragraphs in the document can inherit their
          # TextStyle and
          # ParagraphStyle from this named style
          # when they have the same named style type.
        &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The paragraph style of this named style.
            #
            # Inherited paragraph styles are represented as unset fields in this message.
            # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
            #
            #   * The ParagraphStyle on a Paragraph
            #     inherits from the paragraph&#x27;s corresponding named style type.
            #   * The ParagraphStyle on a named style
            #     inherits from the normal text named style.
            #   * The ParagraphStyle of the normal text named style inherits
            #     from the default paragraph style in the Docs editor.
            #   * The ParagraphStyle on a Paragraph
            #     element that is contained in a table may inherit its paragraph style from
            #     the table style.
            #
            # If the paragraph style does not inherit from a parent, unsetting fields will
            # revert the style to a value matching the defaults in the Docs editor.
          &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
              #
              # Since updating the named style type affects other properties within
              # ParagraphStyle, the named style type is applied before the other properties
              # are updated.
          &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
              # inherited from the parent.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
              # page or column as the next paragraph if possible. If unset, the value is
              # inherited from the parent.
          &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
          &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
              # parent.
            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
          },
          &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
              # is inherited from the parent.
          &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
          &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
              # inherited.
              #
              # This property is read-only.
            { # A tab stop within a paragraph.
              &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
              &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          ],
          &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
              # from the parent.
              #
              # The top border is rendered when the paragraph above has different border
              # and indent properties.
              #
              # Paragraph borders cannot be partially updated. When making
              # changes to a paragraph border the new border must be specified in
              # its entirety.
            &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
              # from the parent.
              #
              # Paragraph borders cannot be partially updated. When making
              # changes to a paragraph border the new border must be specified in
              # its entirety.
            &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
              # inherited from the parent.
              #
              # The bottom border is rendered when the paragraph below has different border
              # and indent properties.
              #
              # Paragraph borders cannot be partially updated. When making
              # changes to a paragraph border the new border must be specified in
              # its entirety.
            &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
              # If unset, the value is inherited from the parent.
              #
              # The between border is rendered when the adjacent paragraph has the same
              # border and indent properties.
              #
              # Paragraph borders cannot be partially updated. When making
              # changes to a paragraph border the new border must be specified in
              # its entirety.
            &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
              # the value is inherited from the parent.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;lineSpacing&quot;: 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.
          &quot;spaceAbove&quot;: { # 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.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
              # column if possible. If unset, the value is inherited from the parent.
          &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
              # heading.
              #
              # This property is read-only.
          &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
              # LEFT_TO_RIGHT since
              # paragraph direction is not inherited.
          &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
              # from the parent.
              #
              # Paragraph borders cannot be partially updated. When making
              # changes to a paragraph border the new border must be specified in
              # its entirety.
            &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
              # the start of the text, based on the current paragraph direction. If unset,
              # the value is inherited from the parent.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
              # the end of the text, based on the current paragraph direction. If unset,
              # the value is inherited from the parent.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
        },
        &quot;namedStyleType&quot;: &quot;A String&quot;, # The type of this named style.
        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this named style.
            #
            # Inherited text styles are represented as unset fields in this message. A
            # text style&#x27;s parent depends on where the text style is defined:
            #
            #   * The TextStyle of text in a Paragraph
            #     inherits from the paragraph&#x27;s corresponding named style type.
            #   * The TextStyle on a named style
            #     inherits from the normal text named style.
            #   * The TextStyle of the normal text named style inherits
            #     from the default text style in the Docs editor.
            #   * The TextStyle on a Paragraph element
            #     that is contained in a table may inherit its text style from the table
            #     style.
            #
            # If the text style does not inherit from a parent, unsetting fields will
            # revert the style to a value matching the defaults in the Docs editor.
          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
              # or transparent, depending on the `color` field.
            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                # a transparent color.
              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
              },
            },
          },
          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
              #
              # 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.
            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                #
                # The font family can be any font from the Font menu in Docs or from
                # [Google Fonts] (https://fonts.google.com/). If the font name is
                # unrecognized, the text is rendered in `Arial`.
            &quot;weight&quot;: 42, # The weight of the font. 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.
                #
                # The default value is `400` (&quot;normal&quot;).
                #
                # The font weight makes up just one component of the rendered font weight.
                # The rendered weight is determined by a combination of the `weight` and the
                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                #
                # * If the text is bold and the weight is less than `400`, the rendered
                #   weight is 400.
                # * If the text is bold and the weight is greater than or equal to `400` but
                #   is less than `700`, the rendered weight is `700`.
                # * If the weight is greater than or equal to `700`, the rendered weight is
                #   equal to the weight.
                # * If the text is not bold, the rendered weight is equal to the weight.
          },
          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
              # or transparent, depending on the `color` field.
            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                # a transparent color.
              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
              },
            },
          },
          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
              #   default link color 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 `&quot;ABC\n123&quot;`,
              #   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.
            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
            &quot;url&quot;: &quot;A String&quot;, # An external URL.
            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
          },
          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
        },
      },
    ],
  },
  &quot;namedRanges&quot;: { # Output only. The named ranges in the document, keyed by name.
    &quot;a_key&quot;: { # A collection of all the NamedRanges in the
        # document that share a given name.
      &quot;namedRanges&quot;: [ # The NamedRanges that share the same name.
        { # A collection of Ranges with the same named range
            # ID.
            #
            # Named ranges allow developers to associate parts of a document with an
            # arbitrary user-defined label so their contents can be programmatically read
            # or edited at a later time. A document can contain multiple named ranges with
            # the same name, but every named range has a unique ID.
            #
            # A named range is created with a single Range,
            # and content inserted inside a named range generally expands that range.
            # However, certain document changes can cause the range to be split into
            # multiple ranges.
            #
            # Named ranges are not private. All applications and collaborators that have
            # access to the document can see its named ranges.
          &quot;name&quot;: &quot;A String&quot;, # The name of the named range.
          &quot;namedRangeId&quot;: &quot;A String&quot;, # The ID of the named range.
          &quot;ranges&quot;: [ # The ranges that belong to this named range.
            { # Specifies a contiguous range of text.
              &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                  # An empty segment ID signifies the document&#x27;s body.
              &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                  #
                  # In all current uses, a start index must be provided. This field is an
                  # Int32Value in order to accommodate future use cases with open-ended ranges.
              &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                  #
                  # In all current uses, an end index must be provided. This field is an
                  # Int32Value in order to accommodate future use cases with open-ended ranges.
            },
          ],
        },
      ],
      &quot;name&quot;: &quot;A String&quot;, # The name that all the named ranges share.
    },
  },
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Google Docs document.
    &quot;title&quot;: &quot;A String&quot;, # The title of the document.
    &quot;suggestionsViewMode&quot;: &quot;A String&quot;, # Output only. The suggestions view mode applied to the document.
        #
        # Note: When editing a document, changes must be based on a document with
        # SUGGESTIONS_INLINE.
    &quot;documentId&quot;: &quot;A String&quot;, # Output only. The ID of the document.
    &quot;footers&quot;: { # Output only. The footers in the document, keyed by footer ID.
      &quot;a_key&quot;: { # A document footer.
        &quot;content&quot;: [ # The contents of the footer.
            #
            # The indexes for a footer&#x27;s content begin at zero.
          { # A StructuralElement describes content that provides structure to the
              # document.
            &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
                # table.
              &quot;rows&quot;: 42, # Number of rows in the table.
              &quot;columns&quot;: 42, # Number of columns in the table.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells.
              &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
                &quot;tableColumnProperties&quot;: [ # The properties of each column.
                    #
                    # Note that in Docs, tables contain rows and rows contain cells, similar to
                    # HTML. So the properties for a row can be found on the row&#x27;s
                    # table_row_style.
                  { # The properties of a column in a table.
                    &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                        # FIXED_WIDTH.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;tableRows&quot;: [ # The contents and style of each row.
                { # The contents and style of a row in a Table.
                  &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a
                        # TableRowStyle.
                      &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_row_style_suggestion_state
                          # to see which fields have changed and their new values.
                        &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                            # at a height equal to or greater than this value in order to show all the
                            # content in the row&#x27;s cells.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                      &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                      },
                    },
                  },
                  &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                      #
                      # It is possible for a table to be non-rectangular, so some rows may have a
                      # different number of cells than other rows in the same table.
                    { # The contents and style of a cell in a Table.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                      &quot;content&quot;: [ # The content of the cell.
                        # Object with schema name: StructuralElement
                      ],
                      &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                      &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                        &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                          &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                              # the changes made in this suggestion. This can be used along with the
                              # table_cell_style_suggestion_state
                              # to see which fields have changed and their new values.
                              #
                              # Inherited table cell styles are represented as unset fields in this message.
                              # A table cell style can inherit from the table&#x27;s style.
                            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;columnSpan&quot;: 42, # The column span of the cell.
                                #
                                # This property is read-only.
                            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                                # matches the alignment for newly created table cells in the Docs editor.
                            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            &quot;rowSpan&quot;: 42, # The row span of the cell.
                                #
                                # This property is read-only.
                          },
                          &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                              # For any field set to true, there is a new suggested value.
                            &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                            &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                            &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                            &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                            &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                            &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                            &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                            &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                            &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                            &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                            &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                            &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                          },
                        },
                      },
                      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                          # of this content.
                        &quot;A String&quot;,
                      ],
                      &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                          # may have multiple insertion IDs if it is a nested suggested change. If
                          # empty, then this is not a suggested insertion.
                        &quot;A String&quot;,
                      ],
                    },
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                  # multiple insertion IDs if it is a nested suggested change. If empty, then
                  # this is not a suggested insertion.
                &quot;A String&quot;,
              ],
            },
            &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
                # a table of contents.
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                  # is a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;content&quot;: [ # The content of the table of contents.
                # Object with schema name: StructuralElement
              ],
            },
            &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
                # units.
            &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
                # section break. A section is a range of content which has the same
                # SectionStyle. A section break represents
                # the start of a new section, and the section style applies to the section
                # after the section break.
                #
                # The document body always begins with a section break.
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                  # a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
                &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a footer margin is being respected for this
                    # section
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                    # LEFT_TO_RIGHT.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a header margin is being respected for this
                    # section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                    # Updating right margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                    #
                    # If empty, the section contains one column with the default properties in
                    # the Docs editor.
                    # A section can be updated to have no more than three columns.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property will result in a 400 bad request error.
                  { # Properties that apply to a section&#x27;s column.
                    &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                    # Updating left margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_footer_id.
                    #
                    # This property is read-only.
                &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the headers on even pages in the section. If it
                    # is false, the headers on even pages uses the default_header_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_header_id.
                    #
                    # This property is read-only.
                &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                    # section. If unset, page numbering continues from the previous section.
                    # If the value is unset in the first
                    # SectionBreak, refer to DocumentStyle&#x27;s
                    # page_number_start.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_header_id.
                    #
                    # This property is read-only.
                &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the footers on even pages in the section. If it
                    # is false, the footers on even pages uses the default_footer_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_footer_id.
                    #
                    # This property is read-only.
                &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                    #
                    # This style can be set even when there is one column in the section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                    # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                    # use_first_page_header_footer for the
                    # first section. If the value is unset for subsequent sectors, it should be
                    # interpreted as false.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the header on the first page of the section. If
                    # it is false, the header on the first page of the section uses the
                    # default_header_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_header_id.
                    #
                    # This property is read-only.
                &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the footer on the first page of the section. If
                    # it is false, the footer on the first page of the section uses the
                    # default_footer_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_footer_id.
                    #
                    # This property is read-only.
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
            },
            &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
                # paragraph. A paragraph is a range of content that is terminated with a
                # newline character.
              &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                  # paragraph, keyed by suggestion ID.
                &quot;a_key&quot;: { # A collection of object IDs.
                  &quot;objectIds&quot;: [ # The object IDs.
                    &quot;A String&quot;,
                  ],
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                  # belong to a list.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
              &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
                &quot;A String&quot;,
              ],
              &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
                &quot;a_key&quot;: { # A suggested change to a Bullet.
                  &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                      # Bullet have been changed in this suggestion.
                      # Bullet have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # list_id.
                    &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # nesting_level.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                        # suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                  },
                  &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                      # in this suggestion. This can be used along with the
                      # bullet_suggestion_state to see which
                      # fields have changed and their new values.
                    &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                  },
                },
              },
              &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
                { # A ParagraphElement describes content within a
                    # Paragraph.
                  &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                      # page break. A page break makes the subsequent text start at the top of the
                      # next page.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a page break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                      # equation.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                      # footnote reference. A footnote reference is the inline content rendered with
                      # a number and is used to identify the footnote.
                    &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                        # contains the content of this footnote reference.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                        # it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                      # an InlineObject.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                        # element contains.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                        # if it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of an inline object element can affect content layout as well as the
                        # styling of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                  },
                  &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                      # run of text that all has the same styling.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                        # have multiple insertion IDs if it is a nested suggested change. If empty,
                        # then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                        #
                        # Any non-text elements in the run are replaced with the Unicode character
                        # U+E907.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                      # horizontal line.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a horizontal rule can affect content layout as well as the styling
                        # of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                        # is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                      # spot in the text that is dynamically replaced with content that can change
                      # over time, like a page number.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                      # column break. A column break makes the subsequent text start at the top of
                      # the next column.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                        # a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a column break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                  &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                      # code units.
                },
              ],
              &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                  # suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # ParagraphStyle.
                  &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                    &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                    &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                    &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                    &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                    &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                    &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                        # this suggestion.
                        # suggested change. For any field set to true, there is a new suggested value.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                    },
                    &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                    &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                    &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                    &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                    &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                    &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                    &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                    &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                    &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                    &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                    &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                    &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                    &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                  },
                  &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # paragraph_suggestion_state
                      # to see which fields have changed and their new values.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                      # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                      #
                      #   * The ParagraphStyle on a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The ParagraphStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The ParagraphStyle of the normal text named style inherits
                      #     from the default paragraph style in the Docs editor.
                      #   * The ParagraphStyle on a Paragraph
                      #     element that is contained in a table may inherit its paragraph style from
                      #     the table style.
                      #
                      # If the paragraph style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                        #
                        # Since updating the named style type affects other properties within
                        # ParagraphStyle, the named style type is applied before the other properties
                        # are updated.
                    &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                        # inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                        # page or column as the next paragraph if possible. If unset, the value is
                        # inherited from the parent.
                    &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                    &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                        # parent.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                        # is inherited from the parent.
                    &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                    &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                        # inherited.
                        #
                        # This property is read-only.
                      { # A tab stop within a paragraph.
                        &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                        &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                    ],
                    &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # The top border is rendered when the paragraph above has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                        # inherited from the parent.
                        #
                        # The bottom border is rendered when the paragraph below has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                        # If unset, the value is inherited from the parent.
                        #
                        # The between border is rendered when the adjacent paragraph has the same
                        # border and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;lineSpacing&quot;: 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.
                    &quot;spaceAbove&quot;: { # 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.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                        # column if possible. If unset, the value is inherited from the parent.
                    &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                        # heading.
                        #
                        # This property is read-only.
                    &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # paragraph direction is not inherited.
                    &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                },
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
                # code units.
          },
        ],
        &quot;footerId&quot;: &quot;A String&quot;, # The ID of the footer.
      },
    },
    &quot;body&quot;: { # The document body. # Output only. The main body of the document.
        #
        # The body typically contains the full document contents except for
        # headers, footers
        # and footnotes.
      &quot;content&quot;: [ # The contents of the body.
          #
          # The indexes for the body&#x27;s content begin at zero.
        { # A StructuralElement describes content that provides structure to the
            # document.
          &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
              # table.
            &quot;rows&quot;: 42, # Number of rows in the table.
            &quot;columns&quot;: 42, # Number of columns in the table.
                #
                # It is possible for a table to be non-rectangular, so some rows may have a
                # different number of cells.
            &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
              &quot;tableColumnProperties&quot;: [ # The properties of each column.
                  #
                  # Note that in Docs, tables contain rows and rows contain cells, similar to
                  # HTML. So the properties for a row can be found on the row&#x27;s
                  # table_row_style.
                { # The properties of a column in a table.
                  &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                      # FIXED_WIDTH.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;tableRows&quot;: [ # The contents and style of each row.
              { # The contents and style of a row in a Table.
                &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                  &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                      # at a height equal to or greater than this value in order to show all the
                      # content in the row&#x27;s cells.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a
                      # TableRowStyle.
                    &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # table_row_style_suggestion_state
                        # to see which fields have changed and their new values.
                      &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                          # at a height equal to or greater than this value in order to show all the
                          # content in the row&#x27;s cells.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                    },
                  },
                },
                &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                    #
                    # It is possible for a table to be non-rectangular, so some rows may have a
                    # different number of cells than other rows in the same table.
                  { # The contents and style of a cell in a Table.
                    &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                        #
                        # Inherited table cell styles are represented as unset fields in this message.
                        # A table cell style can inherit from the table&#x27;s style.
                      &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;columnSpan&quot;: 42, # The column span of the cell.
                          #
                          # This property is read-only.
                      &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                          # matches the alignment for newly created table cells in the Docs editor.
                      &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;rowSpan&quot;: 42, # The row span of the cell.
                          #
                          # This property is read-only.
                    },
                    &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                    &quot;content&quot;: [ # The content of the cell.
                      # Object with schema name: StructuralElement
                    ],
                    &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                    &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                        &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # table_cell_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited table cell styles are represented as unset fields in this message.
                            # A table cell style can inherit from the table&#x27;s style.
                          &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;columnSpan&quot;: 42, # The column span of the cell.
                              #
                              # This property is read-only.
                          &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                              # matches the alignment for newly created table cells in the Docs editor.
                          &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;rowSpan&quot;: 42, # The row span of the cell.
                              #
                              # This property is read-only.
                        },
                        &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                          &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                          &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                          &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                          &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                          &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                          &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                          &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                          &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                          &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
              },
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                # multiple insertion IDs if it is a nested suggested change. If empty, then
                # this is not a suggested insertion.
              &quot;A String&quot;,
            ],
          },
          &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
              # a table of contents.
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                # is a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;content&quot;: [ # The content of the table of contents.
              # Object with schema name: StructuralElement
            ],
          },
          &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
              # units.
          &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
              # section break. A section is a range of content which has the same
              # SectionStyle. A section break represents
              # the start of a new section, and the section style applies to the section
              # after the section break.
              #
              # The document body always begins with a section break.
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                # a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
              &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a footer margin is being respected for this
                  # section
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                  # LEFT_TO_RIGHT.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a header margin is being respected for this
                  # section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                  # Updating right margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                  #
                  # If empty, the section contains one column with the default properties in
                  # the Docs editor.
                  # A section can be updated to have no more than three columns.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property will result in a 400 bad request error.
                { # Properties that apply to a section&#x27;s column.
                  &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                  # Updating left margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_footer_id.
                  #
                  # This property is read-only.
              &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the headers on even pages in the section. If it
                  # is false, the headers on even pages uses the default_header_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_header_id.
                  #
                  # This property is read-only.
              &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                  # section. If unset, page numbering continues from the previous section.
                  # If the value is unset in the first
                  # SectionBreak, refer to DocumentStyle&#x27;s
                  # page_number_start.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_header_id.
                  #
                  # This property is read-only.
              &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the footers on even pages in the section. If it
                  # is false, the footers on even pages uses the default_footer_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_footer_id.
                  #
                  # This property is read-only.
              &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                  #
                  # This style can be set even when there is one column in the section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                  # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                  # use_first_page_header_footer for the
                  # first section. If the value is unset for subsequent sectors, it should be
                  # interpreted as false.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the header on the first page of the section. If
                  # it is false, the header on the first page of the section uses the
                  # default_header_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_header_id.
                  #
                  # This property is read-only.
              &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the footer on the first page of the section. If
                  # it is false, the footer on the first page of the section uses the
                  # default_footer_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_footer_id.
                  #
                  # This property is read-only.
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
          },
          &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
              # paragraph. A paragraph is a range of content that is terminated with a
              # newline character.
            &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                # paragraph, keyed by suggestion ID.
              &quot;a_key&quot;: { # A collection of object IDs.
                &quot;objectIds&quot;: [ # The object IDs.
                  &quot;A String&quot;,
                ],
              },
            },
            &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                # belong to a list.
              &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
            },
            &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
              &quot;A String&quot;,
            ],
            &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
              &quot;a_key&quot;: { # A suggested change to a Bullet.
                &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                    # Bullet have been changed in this suggestion.
                    # Bullet have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # list_id.
                  &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # nesting_level.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                },
                &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                    # in this suggestion. This can be used along with the
                    # bullet_suggestion_state to see which
                    # fields have changed and their new values.
                  &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                },
              },
            },
            &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
              { # A ParagraphElement describes content within a
                  # Paragraph.
                &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                    # page break. A page break makes the subsequent text start at the top of the
                    # next page.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a page break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                    # equation.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                    # footnote reference. A footnote reference is the inline content rendered with
                    # a number and is used to identify the footnote.
                  &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                      # contains the content of this footnote reference.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                      # it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                    # an InlineObject.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                      # element contains.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                      # if it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of an inline object element can affect content layout as well as the
                      # styling of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                },
                &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                    # run of text that all has the same styling.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                      # have multiple insertion IDs if it is a nested suggested change. If empty,
                      # then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                      #
                      # Any non-text elements in the run are replaced with the Unicode character
                      # U+E907.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                    # horizontal line.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a horizontal rule can affect content layout as well as the styling
                      # of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                      # is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                    # spot in the text that is dynamically replaced with content that can change
                    # over time, like a page number.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                    # column break. A column break makes the subsequent text start at the top of
                    # the next column.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                      # a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a column break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                    # code units.
              },
            ],
            &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                # suggestion ID.
              &quot;a_key&quot;: { # A suggested change to a
                  # ParagraphStyle.
                &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                  &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                  &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                  &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                  &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                  &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                      # this suggestion.
                      # suggested change. For any field set to true, there is a new suggested value.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                  },
                  &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                  &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                  &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                  &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                  &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                  &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                  &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                  &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                  &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                  &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                  &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                  &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                },
                &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                    # the changes made in this suggestion. This can be used along with the
                    # paragraph_suggestion_state
                    # to see which fields have changed and their new values.
                    #
                    # Inherited paragraph styles are represented as unset fields in this message.
                    # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                    #
                    #   * The ParagraphStyle on a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The ParagraphStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The ParagraphStyle of the normal text named style inherits
                    #     from the default paragraph style in the Docs editor.
                    #   * The ParagraphStyle on a Paragraph
                    #     element that is contained in a table may inherit its paragraph style from
                    #     the table style.
                    #
                    # If the paragraph style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                      #
                      # Since updating the named style type affects other properties within
                      # ParagraphStyle, the named style type is applied before the other properties
                      # are updated.
                  &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                      # inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                      # page or column as the next paragraph if possible. If unset, the value is
                      # inherited from the parent.
                  &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                  &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                      # parent.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                  },
                  &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                      # is inherited from the parent.
                  &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                  &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                      # inherited.
                      #
                      # This property is read-only.
                    { # A tab stop within a paragraph.
                      &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                      &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                  ],
                  &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # The top border is rendered when the paragraph above has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                      # inherited from the parent.
                      #
                      # The bottom border is rendered when the paragraph below has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                      # If unset, the value is inherited from the parent.
                      #
                      # The between border is rendered when the adjacent paragraph has the same
                      # border and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;lineSpacing&quot;: 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.
                  &quot;spaceAbove&quot;: { # 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.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                      # column if possible. If unset, the value is inherited from the parent.
                  &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                      # heading.
                      #
                      # This property is read-only.
                  &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                      # LEFT_TO_RIGHT since
                      # paragraph direction is not inherited.
                  &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the start of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the end of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              },
            },
            &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                #
                # Inherited paragraph styles are represented as unset fields in this message.
                # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                #
                #   * The ParagraphStyle on a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The ParagraphStyle on a named style
                #     inherits from the normal text named style.
                #   * The ParagraphStyle of the normal text named style inherits
                #     from the default paragraph style in the Docs editor.
                #   * The ParagraphStyle on a Paragraph
                #     element that is contained in a table may inherit its paragraph style from
                #     the table style.
                #
                # If the paragraph style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                  #
                  # Since updating the named style type affects other properties within
                  # ParagraphStyle, the named style type is applied before the other properties
                  # are updated.
              &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                  # inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                  # page or column as the next paragraph if possible. If unset, the value is
                  # inherited from the parent.
              &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
              &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                  # parent.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
              },
              &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                  # is inherited from the parent.
              &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
              &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                  # inherited.
                  #
                  # This property is read-only.
                { # A tab stop within a paragraph.
                  &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                  &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # The top border is rendered when the paragraph above has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                  # inherited from the parent.
                  #
                  # The bottom border is rendered when the paragraph below has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                  # If unset, the value is inherited from the parent.
                  #
                  # The between border is rendered when the adjacent paragraph has the same
                  # border and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;lineSpacing&quot;: 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.
              &quot;spaceAbove&quot;: { # 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.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                  # column if possible. If unset, the value is inherited from the parent.
              &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                  # heading.
                  #
                  # This property is read-only.
              &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                  # LEFT_TO_RIGHT since
                  # paragraph direction is not inherited.
              &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the start of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the end of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
          &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
              # code units.
        },
      ],
    },
    &quot;documentStyle&quot;: { # The style of the document. # Output only. The style of the document.
      &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
          # use_even_page_header_footer determines
          # whether to use the default_header_id or this value for the
          # header on even pages. If not set, there is no even page header.
          #
          # This property is read-only.
      &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
          #
          # Updating the left page margin on the document style clears the left page
          # margin on all section styles. It may also cause columns to resize in all
          # sections.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
          # margin_header,
          # SectionStyle
          # margin_header and
          # DocumentStyle
          # margin_footer,
          # SectionStyle
          # margin_footer are
          # respected. When false, the default values in the Docs editor for header and
          # footer margin are used.
          #
          # This property is read-only.
      &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
          # page.
      &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
        &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
      },
      &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
          # footer.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
          # use_even_page_header_footer determines
          # whether to use the default_footer_id or this value for the
          # footer on even pages. If not set, there is no even page footer.
          #
          # This property is read-only.
      &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
          #
          # Updating the bottom page margin on the document style clears the bottom
          # page margin on all section styles.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
          # background color.
        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
              # a transparent color.
            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
            },
          },
        },
      },
      &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
      &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
          #
          # Updating the right page margin on the document style clears the right page
          # margin on all section styles. It may also cause columns to resize in all
          # sections.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
          # pages.
      &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
          #
          # Updating the top page margin on the document style clears the top page
          # margin on all section styles.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
          #
          # This property is read-only.
      &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
          # header.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
          # a unique footer for the first page does not exist. The value of
          # use_first_page_header_footer determines
          # whether to use the default_footer_id or this value for the
          # footer on the first page. If not set, there is no first page footer.
          #
          # This property is read-only.
      &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
          #
          # This property is read-only.
      &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
          # a unique header for the first page does not exist.
          # The value of use_first_page_header_footer determines
          # whether to use the default_header_id or this value for the
          # header on the first page. If not set, there is no first page header.
          #
          # This property is read-only.
    },
    &quot;suggestedDocumentStyleChanges&quot;: { # Output only. The suggested changes to the style of the document, keyed by
        # suggestion ID.
      &quot;a_key&quot;: { # A suggested change to the DocumentStyle.
        &quot;documentStyle&quot;: { # The style of the document. # A DocumentStyle that only includes
            # the changes made in this suggestion. This can be used along with the
            # document_style_suggestion_state
            # to see which fields have changed and their new values.
          &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
              # use_even_page_header_footer determines
              # whether to use the default_header_id or this value for the
              # header on even pages. If not set, there is no even page header.
              #
              # This property is read-only.
          &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
              #
              # Updating the left page margin on the document style clears the left page
              # margin on all section styles. It may also cause columns to resize in all
              # sections.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
              # margin_header,
              # SectionStyle
              # margin_header and
              # DocumentStyle
              # margin_footer,
              # SectionStyle
              # margin_footer are
              # respected. When false, the default values in the Docs editor for header and
              # footer margin are used.
              #
              # This property is read-only.
          &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
              # page.
          &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
            &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
              # footer.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
              # use_even_page_header_footer determines
              # whether to use the default_footer_id or this value for the
              # footer on even pages. If not set, there is no even page footer.
              #
              # This property is read-only.
          &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
              #
              # Updating the bottom page margin on the document style clears the bottom
              # page margin on all section styles.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
              # background color.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
          },
          &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
          &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
              #
              # Updating the right page margin on the document style clears the right page
              # margin on all section styles. It may also cause columns to resize in all
              # sections.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
              # pages.
          &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
              #
              # Updating the top page margin on the document style clears the top page
              # margin on all section styles.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
              #
              # This property is read-only.
          &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
              # header.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
              # a unique footer for the first page does not exist. The value of
              # use_first_page_header_footer determines
              # whether to use the default_footer_id or this value for the
              # footer on the first page. If not set, there is no first page footer.
              #
              # This property is read-only.
          &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
              #
              # This property is read-only.
          &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
              # a unique header for the first page does not exist.
              # The value of use_first_page_header_footer determines
              # whether to use the default_header_id or this value for the
              # header on the first page. If not set, there is no first page header.
              #
              # This property is read-only.
        },
        &quot;documentStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion.
            # For any field set to true, there is a new suggested value.
          &quot;useFirstPageHeaderFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to use_first_page_header_footer.
          &quot;firstPageHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to first_page_header_id.
          &quot;marginHeaderSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_header.
          &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
          &quot;evenPageHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to even_page_header_id.
          &quot;evenPageFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to even_page_footer_id.
          &quot;pageSizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
              # suggestion.
              # For any field set to true, the Size has
              # a new suggested value.
            &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
            &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
          },
          &quot;firstPageFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to first_page_footer_id.
          &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
          &quot;pageNumberStartSuggested&quot;: True or False, # Indicates if there was a suggested change to page_number_start.
          &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
          &quot;useEvenPageHeaderFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to use_even_page_header_footer.
          &quot;useCustomHeaderFooterMarginsSuggested&quot;: True or False, # Indicates if there was a suggested change to
              # use_custom_header_footer_margins.
          &quot;backgroundSuggestionState&quot;: { # A mask that indicates which of the fields on the base Background have been changed in this suggestion. # A mask that indicates which of the fields in background have been changed in this
              # suggestion.
              # For any field set to true, the Backgound has a new suggested value.
            &quot;backgroundColorSuggested&quot;: True or False, # Indicates whether the current background color has been modified in this
                # suggestion.
          },
          &quot;defaultHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to default_header_id.
          &quot;marginFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_footer.
          &quot;defaultFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to default_footer_id.
          &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
        },
      },
    },
    &quot;suggestedNamedStylesChanges&quot;: { # Output only. The suggested changes to the named styles of the document,
        # keyed by suggestion ID.
      &quot;a_key&quot;: { # A suggested change to the NamedStyles.
        &quot;namedStyles&quot;: { # The named styles. Paragraphs in the document can inherit their # A NamedStyles that only includes the
            # changes made in this suggestion. This can be used along with the
            # named_styles_suggestion_state to
            # see which fields have changed and their new values.
            # TextStyle and
            # ParagraphStyle from these named styles.
          &quot;styles&quot;: [ # The named styles.
              #
              # There is an entry for each of the possible named style types.
            { # A named style. Paragraphs in the document can inherit their
                # TextStyle and
                # ParagraphStyle from this named style
                # when they have the same named style type.
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The paragraph style of this named style.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The type of this named style.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this named style.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
            },
          ],
        },
        &quot;namedStylesSuggestionState&quot;: { # The suggestion state of a NamedStyles # A mask that indicates which of the fields on the base NamedStyles have been changed in this suggestion.
            # message.
          &quot;stylesSuggestionStates&quot;: [ # A mask that indicates which of the fields on the corresponding NamedStyle in styles have been changed in this
              # suggestion.
              #
              # The order of these named style suggestion states match the order of the
              # corresponding named style within the named styles suggestion.
            { # A suggestion state of a NamedStyle message.
              &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                  # suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
              },
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type that this suggestion state corresponds to.
                  #
                  # This field is provided as a convenience for matching the
                  # NamedStyleSuggestionState with its corresponding NamedStyle.
              &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields in paragraph style have been changed in this
                  # suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                    # this suggestion.
                    # suggested change. For any field set to true, there is a new suggested value.
                  &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                },
                &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
              },
            },
          ],
        },
      },
    },
    &quot;positionedObjects&quot;: { # Output only. The positioned objects in the document, keyed by object ID.
      &quot;a_key&quot;: { # An object that is tethered to a Paragraph
          # and positioned relative to the beginning of the paragraph. A PositionedObject
          # contains an EmbeddedObject such as an
          # image.
        &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
            # of this content.
          &quot;A String&quot;,
        ],
        &quot;objectId&quot;: &quot;A String&quot;, # The ID of this positioned object.
        &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
            # insertion.
        &quot;positionedObjectProperties&quot;: { # Properties of a PositionedObject. # The properties of this positioned object.
          &quot;positioning&quot;: { # The positioning of a PositionedObject. The positioned object is positioned # The positioning of this positioned object relative to the newline of the
              # Paragraph that references this positioned
              # object.
              # relative to the beginning of the Paragraph
              # it is tethered to.
            &quot;leftOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the left edge of the positioned object relative to the
                # beginning of the Paragraph it is tethered
                # to. The exact positioning of the object can depend on other content in the
                # document and the document&#x27;s styling.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;layout&quot;: &quot;A String&quot;, # The layout of this positioned object.
            &quot;topOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the top edge of the positioned object relative to the
                # beginning of the Paragraph it is tethered
                # to. The exact positioning of the object can depend on other content in the
                # document and the document&#x27;s styling.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this positioned object.
            &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                # both combined to display alt text.
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
              &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
              &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                  #
                  # The crop rectangle is represented using fractional offsets from the original
                  # content&#x27;s four edges.
                  #
                  # - If the offset is in the interval (0, 1), the corresponding edge of crop
                  # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                  # - If the offset is negative or greater than 1, the corresponding edge of crop
                  # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                  # - If all offsets and rotation angle are 0, the image is not cropped.
                &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                    # from the top edge of the original content as a fraction of the original
                    # content&#x27;s height.
                &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                    # from the left edge of the original content as a fraction of the original
                    # content&#x27;s width.
                &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                    # radians. Rotation is applied after the offsets.
                &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                    # is from the right edge of the original content as a fraction of the
                    # original content&#x27;s width.
                &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                    # is from the bottom edge of the original content as a fraction of the
                    # original content&#x27;s height.
              },
              &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                  # empty.
              &quot;transparency&quot;: 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.
              &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                  # This URI is tagged with the account of the requester. Anyone with the URI
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the document&#x27;s sharing settings change.
            },
            &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
              &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                # combined to display alt text.
            &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
            },
            &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                # a reference to the source Sheets chart when the embedded object is a linked
                # chart.
                #
                # If unset, then the embedded object is not linked.
              &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
            },
            &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
        },
        &quot;suggestedPositionedObjectPropertiesChanges&quot;: { # The suggested changes to the positioned object properties, keyed by
            # suggestion ID.
          &quot;a_key&quot;: { # A suggested change to PositionedObjectProperties.
            &quot;positionedObjectPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                # PositionedObjectProperties have been changed in this
                # suggestion.
                # PositionedObjectProperties
                # have been changed in this suggestion. For any field set to true, there is a
                # new suggested value.
              &quot;positioningSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in positioning have been
                  # changed in this suggestion.
                  # PositionedObjectPositioning have been changed in this
                  # suggestion. For any field set to true, there is a new suggested value.
                &quot;leftOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to left_offset.
                &quot;topOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to top_offset.
                &quot;layoutSuggested&quot;: True or False, # Indicates if there was a suggested change to layout.
              },
              &quot;embeddedObjectSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. # A mask that indicates which of the fields in embedded_object have been
                  # changed in this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
                &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
                &quot;descriptionSuggested&quot;: True or False, # Indicates if there was a suggested change to description.
                &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
                &quot;sizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
                    # suggestion.
                    # For any field set to true, the Size has
                    # a new suggested value.
                  &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                },
                &quot;titleSuggested&quot;: True or False, # Indicates if there was a suggested change to title.
                &quot;linkedContentReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in linked_content_reference have been
                    # changed in this suggestion.
                    # LinkedContentReference have
                    # been changed in this suggestion. For any field set to true, there is a new
                    # suggested value.
                  &quot;sheetsChartReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base SheetsChartReference have been changed in this # A mask that indicates which of the fields in sheets_chart_reference have
                      # been changed in this suggestion.
                      # suggestion. For any field set to true, there is a new suggested value.
                    &quot;chartIdSuggested&quot;: True or False, # Indicates if there was a suggested change to chart_id.
                    &quot;spreadsheetIdSuggested&quot;: True or False, # Indicates if there was a suggested change to spreadsheet_id.
                  },
                },
                &quot;embeddedDrawingPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in embedded_drawing_properties have been
                    # changed in this suggestion.
                    # EmbeddedDrawingProperties
                    # have been changed in this suggestion. For any field set to true, there is a
                    # new suggested value.
                },
                &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
                &quot;imagePropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. # A mask that indicates which of the fields in image_properties have been changed in
                    # this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;cropPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. # A mask that indicates which of the fields in crop_properties have been changed in
                      # this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                    &quot;offsetTopSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_top.
                    &quot;offsetBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_bottom.
                    &quot;offsetLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_left.
                    &quot;offsetRightSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_right.
                  },
                  &quot;brightnessSuggested&quot;: True or False, # Indicates if there was a suggested change to brightness.
                  &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                  &quot;contrastSuggested&quot;: True or False, # Indicates if there was a suggested change to contrast.
                  &quot;contentUriSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # content_uri.
                  &quot;sourceUriSuggested&quot;: True or False, # Indicates if there was a suggested change to source_uri.
                  &quot;transparencySuggested&quot;: True or False, # Indicates if there was a suggested change to transparency.
                },
                &quot;embeddedObjectBorderSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this # A mask that indicates which of the fields in embedded_object_border have been
                    # changed in this suggestion.
                    # suggestion. For any field set to true, there is a new suggested value.
                  &quot;propertyStateSuggested&quot;: True or False, # Indicates if there was a suggested change to property_state.
                  &quot;colorSuggested&quot;: True or False, # Indicates if there was a suggested change to color.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                  &quot;dashStyleSuggested&quot;: True or False, # Indicates if there was a suggested change to dash_style.
                },
              },
            },
            &quot;positionedObjectProperties&quot;: { # Properties of a PositionedObject. # A PositionedObjectProperties that only includes the
                # changes made in this suggestion. This can be used along with the
                # positioned_object_properties_suggestion_state
                # to see which fields have changed and their new values.
              &quot;positioning&quot;: { # The positioning of a PositionedObject. The positioned object is positioned # The positioning of this positioned object relative to the newline of the
                  # Paragraph that references this positioned
                  # object.
                  # relative to the beginning of the Paragraph
                  # it is tethered to.
                &quot;leftOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the left edge of the positioned object relative to the
                    # beginning of the Paragraph it is tethered
                    # to. The exact positioning of the object can depend on other content in the
                    # document and the document&#x27;s styling.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;layout&quot;: &quot;A String&quot;, # The layout of this positioned object.
                &quot;topOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the top edge of the positioned object relative to the
                    # beginning of the Paragraph it is tethered
                    # to. The exact positioning of the object can depend on other content in the
                    # document and the document&#x27;s styling.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this positioned object.
                &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                    # both combined to display alt text.
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
                  &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
                  &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                      #
                      # The crop rectangle is represented using fractional offsets from the original
                      # content&#x27;s four edges.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                      # - If all offsets and rotation angle are 0, the image is not cropped.
                    &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                        # from the top edge of the original content as a fraction of the original
                        # content&#x27;s height.
                    &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                        # from the left edge of the original content as a fraction of the original
                        # content&#x27;s width.
                    &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                        # radians. Rotation is applied after the offsets.
                    &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                        # is from the right edge of the original content as a fraction of the
                        # original content&#x27;s width.
                    &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                        # is from the bottom edge of the original content as a fraction of the
                        # original content&#x27;s height.
                  },
                  &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                      # empty.
                  &quot;transparency&quot;: 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.
                  &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                      # This URI is tagged with the account of the requester. Anyone with the URI
                      # effectively accesses the image as the original requester. Access to the
                      # image may be lost if the document&#x27;s sharing settings change.
                },
                &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
                  &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                    # combined to display alt text.
                &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
                },
                &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                    # a reference to the source Sheets chart when the embedded object is a linked
                    # chart.
                    #
                    # If unset, then the embedded object is not linked.
                  &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                    &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                    &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                        # embedded.
                  },
                },
                &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
          },
        },
      },
    },
    &quot;inlineObjects&quot;: { # Output only. The inline objects in the document, keyed by object ID.
      &quot;a_key&quot;: { # An object that appears inline with text. An InlineObject contains
          # an EmbeddedObject such as an image.
        &quot;inlineObjectProperties&quot;: { # Properties of an InlineObject. # The properties of this inline object.
          &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this inline object.
            &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                # both combined to display alt text.
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
              &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
              &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                  #
                  # The crop rectangle is represented using fractional offsets from the original
                  # content&#x27;s four edges.
                  #
                  # - If the offset is in the interval (0, 1), the corresponding edge of crop
                  # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                  # - If the offset is negative or greater than 1, the corresponding edge of crop
                  # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                  # - If all offsets and rotation angle are 0, the image is not cropped.
                &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                    # from the top edge of the original content as a fraction of the original
                    # content&#x27;s height.
                &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                    # from the left edge of the original content as a fraction of the original
                    # content&#x27;s width.
                &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                    # radians. Rotation is applied after the offsets.
                &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                    # is from the right edge of the original content as a fraction of the
                    # original content&#x27;s width.
                &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                    # is from the bottom edge of the original content as a fraction of the
                    # original content&#x27;s height.
              },
              &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                  # empty.
              &quot;transparency&quot;: 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.
              &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                  # This URI is tagged with the account of the requester. Anyone with the URI
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the document&#x27;s sharing settings change.
            },
            &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
              &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                # combined to display alt text.
            &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
            },
            &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                # a reference to the source Sheets chart when the embedded object is a linked
                # chart.
                #
                # If unset, then the embedded object is not linked.
              &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
            },
            &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
        },
        &quot;suggestedInlineObjectPropertiesChanges&quot;: { # The suggested changes to the inline object properties, keyed by suggestion
            # ID.
          &quot;a_key&quot;: { # A suggested change to InlineObjectProperties.
            &quot;inlineObjectProperties&quot;: { # Properties of an InlineObject. # An InlineObjectProperties
                # that only includes the changes made in this suggestion. This can be used
                # along with the inline_object_properties_suggestion_state
                # to see which fields have changed and their new values.
              &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this inline object.
                &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                    # both combined to display alt text.
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
                  &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
                  &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                      #
                      # The crop rectangle is represented using fractional offsets from the original
                      # content&#x27;s four edges.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                      # - If all offsets and rotation angle are 0, the image is not cropped.
                    &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                        # from the top edge of the original content as a fraction of the original
                        # content&#x27;s height.
                    &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                        # from the left edge of the original content as a fraction of the original
                        # content&#x27;s width.
                    &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                        # radians. Rotation is applied after the offsets.
                    &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                        # is from the right edge of the original content as a fraction of the
                        # original content&#x27;s width.
                    &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                        # is from the bottom edge of the original content as a fraction of the
                        # original content&#x27;s height.
                  },
                  &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                      # empty.
                  &quot;transparency&quot;: 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.
                  &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                      # This URI is tagged with the account of the requester. Anyone with the URI
                      # effectively accesses the image as the original requester. Access to the
                      # image may be lost if the document&#x27;s sharing settings change.
                },
                &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
                  &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                    # combined to display alt text.
                &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
                },
                &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                    # a reference to the source Sheets chart when the embedded object is a linked
                    # chart.
                    #
                    # If unset, then the embedded object is not linked.
                  &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                    &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                    &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                        # embedded.
                  },
                },
                &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;inlineObjectPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                # InlineObjectProperties have
                # been changed in this suggestion.
                # InlineObjectProperties have
                # been changed in this suggestion. For any field set to true, there is a new
                # suggested value.
              &quot;embeddedObjectSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. # A mask that indicates which of the fields in embedded_object have been
                  # changed in this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
                &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
                &quot;descriptionSuggested&quot;: True or False, # Indicates if there was a suggested change to description.
                &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
                &quot;sizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
                    # suggestion.
                    # For any field set to true, the Size has
                    # a new suggested value.
                  &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                },
                &quot;titleSuggested&quot;: True or False, # Indicates if there was a suggested change to title.
                &quot;linkedContentReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in linked_content_reference have been
                    # changed in this suggestion.
                    # LinkedContentReference have
                    # been changed in this suggestion. For any field set to true, there is a new
                    # suggested value.
                  &quot;sheetsChartReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base SheetsChartReference have been changed in this # A mask that indicates which of the fields in sheets_chart_reference have
                      # been changed in this suggestion.
                      # suggestion. For any field set to true, there is a new suggested value.
                    &quot;chartIdSuggested&quot;: True or False, # Indicates if there was a suggested change to chart_id.
                    &quot;spreadsheetIdSuggested&quot;: True or False, # Indicates if there was a suggested change to spreadsheet_id.
                  },
                },
                &quot;embeddedDrawingPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in embedded_drawing_properties have been
                    # changed in this suggestion.
                    # EmbeddedDrawingProperties
                    # have been changed in this suggestion. For any field set to true, there is a
                    # new suggested value.
                },
                &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
                &quot;imagePropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. # A mask that indicates which of the fields in image_properties have been changed in
                    # this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;cropPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. # A mask that indicates which of the fields in crop_properties have been changed in
                      # this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                    &quot;offsetTopSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_top.
                    &quot;offsetBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_bottom.
                    &quot;offsetLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_left.
                    &quot;offsetRightSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_right.
                  },
                  &quot;brightnessSuggested&quot;: True or False, # Indicates if there was a suggested change to brightness.
                  &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                  &quot;contrastSuggested&quot;: True or False, # Indicates if there was a suggested change to contrast.
                  &quot;contentUriSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # content_uri.
                  &quot;sourceUriSuggested&quot;: True or False, # Indicates if there was a suggested change to source_uri.
                  &quot;transparencySuggested&quot;: True or False, # Indicates if there was a suggested change to transparency.
                },
                &quot;embeddedObjectBorderSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this # A mask that indicates which of the fields in embedded_object_border have been
                    # changed in this suggestion.
                    # suggestion. For any field set to true, there is a new suggested value.
                  &quot;propertyStateSuggested&quot;: True or False, # Indicates if there was a suggested change to property_state.
                  &quot;colorSuggested&quot;: True or False, # Indicates if there was a suggested change to color.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                  &quot;dashStyleSuggested&quot;: True or False, # Indicates if there was a suggested change to dash_style.
                },
              },
            },
          },
        },
        &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
            # of this content.
          &quot;A String&quot;,
        ],
        &quot;objectId&quot;: &quot;A String&quot;, # The ID of this inline object.
        &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
            # insertion.
      },
    },
    &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision ID of the document. Can be used in update
        # requests to specify which revision of a document to apply updates to and
        # how the request should behave if the document has been edited since that
        # revision. Only populated if the user has edit access to the document.
        #
        # 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 document has not changed.
        # Conversely, a changed ID (for the same document and user) usually means the
        # document has been updated; however, a changed ID can also be due to
        # internal factors such as ID format changes.
    &quot;lists&quot;: { # Output only. The lists in the document, keyed by list ID.
      &quot;a_key&quot;: { # A List represents the list attributes for a group of paragraphs that all
          # belong to the same list. A paragraph that is part of a list has a reference
          # to the list&#x27;s ID in its bullet.
        &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
            # of this list.
          &quot;A String&quot;,
        ],
        &quot;listProperties&quot;: { # The properties of a list which describe the look # The properties of the list.
            # and feel of bullets belonging to paragraphs associated with a list.
          &quot;nestingLevels&quot;: [ # Describes the properties of the bullets at the associated level.
              #
              # A list has at most nine levels of nesting with nesting level 0
              # corresponding to the top-most level and nesting level 8 corresponding to
              # the most nested level. The nesting levels are returned in ascending order
              # with the least nested returned first.
            { # Contains properties describing the look and feel of a list bullet at a given
                # level of nesting.
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of paragraphs at this level of
                  # nesting.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;glyphSymbol&quot;: &quot;A String&quot;, # A custom glyph symbol used by bullets when paragraphs at this level of
                  # nesting are unordered.
                  #
                  # The glyph symbol replaces placeholders within the glyph_format. For example, if the
                  # glyph_symbol is the solid circle corresponding to Unicode U+25cf code
                  # point and the glyph_format is `%0`, the rendered
                  # glyph would be the solid circle.
              &quot;glyphFormat&quot;: &quot;A String&quot;, # The format string used by bullets at this level of nesting.
                  #
                  # The glyph format contains one or more placeholders, and these placeholder
                  # are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow
                  # the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes
                  # and suffixes. Thus, the glyph format follows the pattern
                  # `&lt;prefix&gt;%[nesting_level]&lt;suffix&gt;`. Note that the prefix and suffix are
                  # optional and can be arbitrary strings.
                  #
                  # For example, the glyph format `%0.` indicates that the rendered glyph will
                  # replace the placeholder with the corresponding glyph for nesting level 0
                  # followed by a period as the suffix. So a list with a glyph type of
                  # UPPER_ALPHA and
                  # glyph format `%0.` at nesting level 0 will result in a list with rendered
                  # glyphs
                  # &lt;p&gt;`A.`
                  # &lt;p&gt;`B.`
                  # &lt;p&gt;`C.`
                  #
                  # The glyph format can contain placeholders for the current nesting level as
                  # well as placeholders for parent nesting levels. For example, a
                  # list can have a glyph format of `%0.` at nesting level 0 and a
                  # glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels
                  # have DECIMAL glyph
                  # types, this would result in a list with rendered glyphs
                  # &lt;p&gt;`1.`
                  # &lt;p&gt;`2.`
                  # &lt;p&gt;`  2.1.`
                  # &lt;p&gt;`  2.2.`
                  # &lt;p&gt;`3.`
                  #
                  # For nesting levels that are ordered, the string that replaces a placeholder
                  # in the glyph format for a particular paragraph depends on the paragraph&#x27;s
                  # order within the list.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of bullets at this level of nesting.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;startNumber&quot;: 42, # The number of the first list item at this nesting level.
                  #
                  # A value of 0 is treated as a value of 1 for lettered lists and roman
                  # numeraled lists, i.e. for values of both 0 and 1, lettered and roman
                  # numeraled lists will begin at `a` and `i` respectively.
                  #
                  # This value is ignored for nesting levels with unordered glyphs.
              &quot;bulletAlignment&quot;: &quot;A String&quot;, # The alignment of the bullet within the space allotted for rendering the
                  # bullet.
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for paragraphs at this level of nesting. Applied
                  # to the side that corresponds to the start of the text, based on the
                  # paragraph&#x27;s content direction.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;glyphType&quot;: &quot;A String&quot;, # The type of glyph used by bullets when paragraphs at this level of
                  # nesting are ordered.
                  #
                  # The glyph type determines the type of glyph used to replace placeholders
                  # within the glyph_format
                  # when paragraphs at this level of nesting are ordered. For example, if the
                  # nesting level is 0, the glyph_format is `%0.` and the glyph
                  # type is DECIMAL,
                  # then the rendered glyph would replace the placeholder `%0` in the glyph
                  # format with a number corresponding to list item&#x27;s order within the list.
            },
          ],
        },
        &quot;suggestedListPropertiesChanges&quot;: { # The suggested changes to the list properties, keyed by suggestion
            # ID.
          &quot;a_key&quot;: { # A suggested change to ListProperties.
            &quot;listProperties&quot;: { # The properties of a list which describe the look # A ListProperties that only includes
                # the changes made in this suggestion. This can be used along with the
                # list_properties_suggestion_state
                # to see which fields have changed and their new values.
                # and feel of bullets belonging to paragraphs associated with a list.
              &quot;nestingLevels&quot;: [ # Describes the properties of the bullets at the associated level.
                  #
                  # A list has at most nine levels of nesting with nesting level 0
                  # corresponding to the top-most level and nesting level 8 corresponding to
                  # the most nested level. The nesting levels are returned in ascending order
                  # with the least nested returned first.
                { # Contains properties describing the look and feel of a list bullet at a given
                    # level of nesting.
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of paragraphs at this level of
                      # nesting.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;glyphSymbol&quot;: &quot;A String&quot;, # A custom glyph symbol used by bullets when paragraphs at this level of
                      # nesting are unordered.
                      #
                      # The glyph symbol replaces placeholders within the glyph_format. For example, if the
                      # glyph_symbol is the solid circle corresponding to Unicode U+25cf code
                      # point and the glyph_format is `%0`, the rendered
                      # glyph would be the solid circle.
                  &quot;glyphFormat&quot;: &quot;A String&quot;, # The format string used by bullets at this level of nesting.
                      #
                      # The glyph format contains one or more placeholders, and these placeholder
                      # are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow
                      # the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes
                      # and suffixes. Thus, the glyph format follows the pattern
                      # `&lt;prefix&gt;%[nesting_level]&lt;suffix&gt;`. Note that the prefix and suffix are
                      # optional and can be arbitrary strings.
                      #
                      # For example, the glyph format `%0.` indicates that the rendered glyph will
                      # replace the placeholder with the corresponding glyph for nesting level 0
                      # followed by a period as the suffix. So a list with a glyph type of
                      # UPPER_ALPHA and
                      # glyph format `%0.` at nesting level 0 will result in a list with rendered
                      # glyphs
                      # &lt;p&gt;`A.`
                      # &lt;p&gt;`B.`
                      # &lt;p&gt;`C.`
                      #
                      # The glyph format can contain placeholders for the current nesting level as
                      # well as placeholders for parent nesting levels. For example, a
                      # list can have a glyph format of `%0.` at nesting level 0 and a
                      # glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels
                      # have DECIMAL glyph
                      # types, this would result in a list with rendered glyphs
                      # &lt;p&gt;`1.`
                      # &lt;p&gt;`2.`
                      # &lt;p&gt;`  2.1.`
                      # &lt;p&gt;`  2.2.`
                      # &lt;p&gt;`3.`
                      #
                      # For nesting levels that are ordered, the string that replaces a placeholder
                      # in the glyph format for a particular paragraph depends on the paragraph&#x27;s
                      # order within the list.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of bullets at this level of nesting.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;startNumber&quot;: 42, # The number of the first list item at this nesting level.
                      #
                      # A value of 0 is treated as a value of 1 for lettered lists and roman
                      # numeraled lists, i.e. for values of both 0 and 1, lettered and roman
                      # numeraled lists will begin at `a` and `i` respectively.
                      #
                      # This value is ignored for nesting levels with unordered glyphs.
                  &quot;bulletAlignment&quot;: &quot;A String&quot;, # The alignment of the bullet within the space allotted for rendering the
                      # bullet.
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for paragraphs at this level of nesting. Applied
                      # to the side that corresponds to the start of the text, based on the
                      # paragraph&#x27;s content direction.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;glyphType&quot;: &quot;A String&quot;, # The type of glyph used by bullets when paragraphs at this level of
                      # nesting are ordered.
                      #
                      # The glyph type determines the type of glyph used to replace placeholders
                      # within the glyph_format
                      # when paragraphs at this level of nesting are ordered. For example, if the
                      # nesting level is 0, the glyph_format is `%0.` and the glyph
                      # type is DECIMAL,
                      # then the rendered glyph would replace the placeholder `%0` in the glyph
                      # format with a number corresponding to list item&#x27;s order within the list.
                },
              ],
            },
            &quot;listPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion. # A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion.
                # For any field set to true, there is a new suggested value.
              &quot;nestingLevelsSuggestionStates&quot;: [ # A mask that indicates which of the fields on the corresponding
                  # NestingLevel in nesting_levels have been changed in
                  # this suggestion.
                  #
                  # The nesting level suggestion states are returned in ascending order of the
                  # nesting level with the least nested returned first.
                { # A mask that indicates which of the fields on the base NestingLevel have been changed in this suggestion. For
                    # any field set to true, there is a new suggested value.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # indent_first_line.
                  &quot;bulletAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # bullet_alignment.
                  &quot;glyphSymbolSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # glyph_symbol.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # indent_start.
                  &quot;glyphFormatSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # glyph_format.
                  &quot;startNumberSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # start_number.
                  &quot;glyphTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # glyph_type.
                },
              ],
            },
          },
        },
        &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
            # insertion.
      },
    },
    &quot;headers&quot;: { # Output only. The headers in the document, keyed by header ID.
      &quot;a_key&quot;: { # A document header.
        &quot;headerId&quot;: &quot;A String&quot;, # The ID of the header.
        &quot;content&quot;: [ # The contents of the header.
            #
            # The indexes for a header&#x27;s content begin at zero.
          { # A StructuralElement describes content that provides structure to the
              # document.
            &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
                # table.
              &quot;rows&quot;: 42, # Number of rows in the table.
              &quot;columns&quot;: 42, # Number of columns in the table.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells.
              &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
                &quot;tableColumnProperties&quot;: [ # The properties of each column.
                    #
                    # Note that in Docs, tables contain rows and rows contain cells, similar to
                    # HTML. So the properties for a row can be found on the row&#x27;s
                    # table_row_style.
                  { # The properties of a column in a table.
                    &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                        # FIXED_WIDTH.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;tableRows&quot;: [ # The contents and style of each row.
                { # The contents and style of a row in a Table.
                  &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a
                        # TableRowStyle.
                      &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_row_style_suggestion_state
                          # to see which fields have changed and their new values.
                        &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                            # at a height equal to or greater than this value in order to show all the
                            # content in the row&#x27;s cells.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                      &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                      },
                    },
                  },
                  &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                      #
                      # It is possible for a table to be non-rectangular, so some rows may have a
                      # different number of cells than other rows in the same table.
                    { # The contents and style of a cell in a Table.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                      &quot;content&quot;: [ # The content of the cell.
                        # Object with schema name: StructuralElement
                      ],
                      &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                      &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                        &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                          &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                              # the changes made in this suggestion. This can be used along with the
                              # table_cell_style_suggestion_state
                              # to see which fields have changed and their new values.
                              #
                              # Inherited table cell styles are represented as unset fields in this message.
                              # A table cell style can inherit from the table&#x27;s style.
                            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;columnSpan&quot;: 42, # The column span of the cell.
                                #
                                # This property is read-only.
                            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                                # matches the alignment for newly created table cells in the Docs editor.
                            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            &quot;rowSpan&quot;: 42, # The row span of the cell.
                                #
                                # This property is read-only.
                          },
                          &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                              # For any field set to true, there is a new suggested value.
                            &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                            &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                            &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                            &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                            &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                            &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                            &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                            &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                            &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                            &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                            &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                            &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                          },
                        },
                      },
                      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                          # of this content.
                        &quot;A String&quot;,
                      ],
                      &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                          # may have multiple insertion IDs if it is a nested suggested change. If
                          # empty, then this is not a suggested insertion.
                        &quot;A String&quot;,
                      ],
                    },
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                  # multiple insertion IDs if it is a nested suggested change. If empty, then
                  # this is not a suggested insertion.
                &quot;A String&quot;,
              ],
            },
            &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
                # a table of contents.
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                  # is a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;content&quot;: [ # The content of the table of contents.
                # Object with schema name: StructuralElement
              ],
            },
            &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
                # units.
            &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
                # section break. A section is a range of content which has the same
                # SectionStyle. A section break represents
                # the start of a new section, and the section style applies to the section
                # after the section break.
                #
                # The document body always begins with a section break.
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                  # a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
                &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a footer margin is being respected for this
                    # section
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                    # LEFT_TO_RIGHT.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a header margin is being respected for this
                    # section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                    # Updating right margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                    #
                    # If empty, the section contains one column with the default properties in
                    # the Docs editor.
                    # A section can be updated to have no more than three columns.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property will result in a 400 bad request error.
                  { # Properties that apply to a section&#x27;s column.
                    &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                    # Updating left margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_footer_id.
                    #
                    # This property is read-only.
                &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the headers on even pages in the section. If it
                    # is false, the headers on even pages uses the default_header_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_header_id.
                    #
                    # This property is read-only.
                &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                    # section. If unset, page numbering continues from the previous section.
                    # If the value is unset in the first
                    # SectionBreak, refer to DocumentStyle&#x27;s
                    # page_number_start.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_header_id.
                    #
                    # This property is read-only.
                &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the footers on even pages in the section. If it
                    # is false, the footers on even pages uses the default_footer_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_footer_id.
                    #
                    # This property is read-only.
                &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                    #
                    # This style can be set even when there is one column in the section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                    # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                    # use_first_page_header_footer for the
                    # first section. If the value is unset for subsequent sectors, it should be
                    # interpreted as false.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the header on the first page of the section. If
                    # it is false, the header on the first page of the section uses the
                    # default_header_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_header_id.
                    #
                    # This property is read-only.
                &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the footer on the first page of the section. If
                    # it is false, the footer on the first page of the section uses the
                    # default_footer_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_footer_id.
                    #
                    # This property is read-only.
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
            },
            &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
                # paragraph. A paragraph is a range of content that is terminated with a
                # newline character.
              &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                  # paragraph, keyed by suggestion ID.
                &quot;a_key&quot;: { # A collection of object IDs.
                  &quot;objectIds&quot;: [ # The object IDs.
                    &quot;A String&quot;,
                  ],
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                  # belong to a list.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
              &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
                &quot;A String&quot;,
              ],
              &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
                &quot;a_key&quot;: { # A suggested change to a Bullet.
                  &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                      # Bullet have been changed in this suggestion.
                      # Bullet have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # list_id.
                    &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # nesting_level.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                        # suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                  },
                  &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                      # in this suggestion. This can be used along with the
                      # bullet_suggestion_state to see which
                      # fields have changed and their new values.
                    &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                  },
                },
              },
              &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
                { # A ParagraphElement describes content within a
                    # Paragraph.
                  &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                      # page break. A page break makes the subsequent text start at the top of the
                      # next page.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a page break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                      # equation.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                      # footnote reference. A footnote reference is the inline content rendered with
                      # a number and is used to identify the footnote.
                    &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                        # contains the content of this footnote reference.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                        # it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                      # an InlineObject.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                        # element contains.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                        # if it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of an inline object element can affect content layout as well as the
                        # styling of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                  },
                  &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                      # run of text that all has the same styling.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                        # have multiple insertion IDs if it is a nested suggested change. If empty,
                        # then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                        #
                        # Any non-text elements in the run are replaced with the Unicode character
                        # U+E907.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                      # horizontal line.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a horizontal rule can affect content layout as well as the styling
                        # of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                        # is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                      # spot in the text that is dynamically replaced with content that can change
                      # over time, like a page number.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                      # column break. A column break makes the subsequent text start at the top of
                      # the next column.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                        # a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a column break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                  &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                      # code units.
                },
              ],
              &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                  # suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # ParagraphStyle.
                  &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                    &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                    &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                    &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                    &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                    &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                    &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                        # this suggestion.
                        # suggested change. For any field set to true, there is a new suggested value.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                    },
                    &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                    &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                    &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                    &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                    &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                    &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                    &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                    &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                    &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                    &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                    &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                    &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                    &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                  },
                  &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # paragraph_suggestion_state
                      # to see which fields have changed and their new values.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                      # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                      #
                      #   * The ParagraphStyle on a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The ParagraphStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The ParagraphStyle of the normal text named style inherits
                      #     from the default paragraph style in the Docs editor.
                      #   * The ParagraphStyle on a Paragraph
                      #     element that is contained in a table may inherit its paragraph style from
                      #     the table style.
                      #
                      # If the paragraph style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                        #
                        # Since updating the named style type affects other properties within
                        # ParagraphStyle, the named style type is applied before the other properties
                        # are updated.
                    &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                        # inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                        # page or column as the next paragraph if possible. If unset, the value is
                        # inherited from the parent.
                    &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                    &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                        # parent.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                        # is inherited from the parent.
                    &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                    &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                        # inherited.
                        #
                        # This property is read-only.
                      { # A tab stop within a paragraph.
                        &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                        &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                    ],
                    &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # The top border is rendered when the paragraph above has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                        # inherited from the parent.
                        #
                        # The bottom border is rendered when the paragraph below has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                        # If unset, the value is inherited from the parent.
                        #
                        # The between border is rendered when the adjacent paragraph has the same
                        # border and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;lineSpacing&quot;: 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.
                    &quot;spaceAbove&quot;: { # 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.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                        # column if possible. If unset, the value is inherited from the parent.
                    &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                        # heading.
                        #
                        # This property is read-only.
                    &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # paragraph direction is not inherited.
                    &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                },
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
                # code units.
          },
        ],
      },
    },
    &quot;footnotes&quot;: { # Output only. The footnotes in the document, keyed by footnote ID.
      &quot;a_key&quot;: { # A document footnote.
        &quot;content&quot;: [ # The contents of the footnote.
            #
            # The indexes for a footnote&#x27;s content begin at zero.
          { # A StructuralElement describes content that provides structure to the
              # document.
            &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
                # table.
              &quot;rows&quot;: 42, # Number of rows in the table.
              &quot;columns&quot;: 42, # Number of columns in the table.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells.
              &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
                &quot;tableColumnProperties&quot;: [ # The properties of each column.
                    #
                    # Note that in Docs, tables contain rows and rows contain cells, similar to
                    # HTML. So the properties for a row can be found on the row&#x27;s
                    # table_row_style.
                  { # The properties of a column in a table.
                    &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                        # FIXED_WIDTH.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;tableRows&quot;: [ # The contents and style of each row.
                { # The contents and style of a row in a Table.
                  &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a
                        # TableRowStyle.
                      &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_row_style_suggestion_state
                          # to see which fields have changed and their new values.
                        &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                            # at a height equal to or greater than this value in order to show all the
                            # content in the row&#x27;s cells.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                      &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                      },
                    },
                  },
                  &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                      #
                      # It is possible for a table to be non-rectangular, so some rows may have a
                      # different number of cells than other rows in the same table.
                    { # The contents and style of a cell in a Table.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                      &quot;content&quot;: [ # The content of the cell.
                        # Object with schema name: StructuralElement
                      ],
                      &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                      &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                        &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                          &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                              # the changes made in this suggestion. This can be used along with the
                              # table_cell_style_suggestion_state
                              # to see which fields have changed and their new values.
                              #
                              # Inherited table cell styles are represented as unset fields in this message.
                              # A table cell style can inherit from the table&#x27;s style.
                            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;columnSpan&quot;: 42, # The column span of the cell.
                                #
                                # This property is read-only.
                            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                                # matches the alignment for newly created table cells in the Docs editor.
                            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            &quot;rowSpan&quot;: 42, # The row span of the cell.
                                #
                                # This property is read-only.
                          },
                          &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                              # For any field set to true, there is a new suggested value.
                            &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                            &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                            &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                            &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                            &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                            &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                            &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                            &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                            &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                            &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                            &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                            &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                          },
                        },
                      },
                      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                          # of this content.
                        &quot;A String&quot;,
                      ],
                      &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                          # may have multiple insertion IDs if it is a nested suggested change. If
                          # empty, then this is not a suggested insertion.
                        &quot;A String&quot;,
                      ],
                    },
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                  # multiple insertion IDs if it is a nested suggested change. If empty, then
                  # this is not a suggested insertion.
                &quot;A String&quot;,
              ],
            },
            &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
                # a table of contents.
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                  # is a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;content&quot;: [ # The content of the table of contents.
                # Object with schema name: StructuralElement
              ],
            },
            &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
                # units.
            &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
                # section break. A section is a range of content which has the same
                # SectionStyle. A section break represents
                # the start of a new section, and the section style applies to the section
                # after the section break.
                #
                # The document body always begins with a section break.
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                  # a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
                &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a footer margin is being respected for this
                    # section
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                    # LEFT_TO_RIGHT.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a header margin is being respected for this
                    # section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                    # Updating right margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                    #
                    # If empty, the section contains one column with the default properties in
                    # the Docs editor.
                    # A section can be updated to have no more than three columns.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property will result in a 400 bad request error.
                  { # Properties that apply to a section&#x27;s column.
                    &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                    # Updating left margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_footer_id.
                    #
                    # This property is read-only.
                &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the headers on even pages in the section. If it
                    # is false, the headers on even pages uses the default_header_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_header_id.
                    #
                    # This property is read-only.
                &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                    # section. If unset, page numbering continues from the previous section.
                    # If the value is unset in the first
                    # SectionBreak, refer to DocumentStyle&#x27;s
                    # page_number_start.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_header_id.
                    #
                    # This property is read-only.
                &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the footers on even pages in the section. If it
                    # is false, the footers on even pages uses the default_footer_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_footer_id.
                    #
                    # This property is read-only.
                &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                    #
                    # This style can be set even when there is one column in the section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                    # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                    # use_first_page_header_footer for the
                    # first section. If the value is unset for subsequent sectors, it should be
                    # interpreted as false.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the header on the first page of the section. If
                    # it is false, the header on the first page of the section uses the
                    # default_header_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_header_id.
                    #
                    # This property is read-only.
                &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the footer on the first page of the section. If
                    # it is false, the footer on the first page of the section uses the
                    # default_footer_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_footer_id.
                    #
                    # This property is read-only.
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
            },
            &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
                # paragraph. A paragraph is a range of content that is terminated with a
                # newline character.
              &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                  # paragraph, keyed by suggestion ID.
                &quot;a_key&quot;: { # A collection of object IDs.
                  &quot;objectIds&quot;: [ # The object IDs.
                    &quot;A String&quot;,
                  ],
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                  # belong to a list.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
              &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
                &quot;A String&quot;,
              ],
              &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
                &quot;a_key&quot;: { # A suggested change to a Bullet.
                  &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                      # Bullet have been changed in this suggestion.
                      # Bullet have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # list_id.
                    &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # nesting_level.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                        # suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                  },
                  &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                      # in this suggestion. This can be used along with the
                      # bullet_suggestion_state to see which
                      # fields have changed and their new values.
                    &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                  },
                },
              },
              &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
                { # A ParagraphElement describes content within a
                    # Paragraph.
                  &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                      # page break. A page break makes the subsequent text start at the top of the
                      # next page.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a page break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                      # equation.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                      # footnote reference. A footnote reference is the inline content rendered with
                      # a number and is used to identify the footnote.
                    &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                        # contains the content of this footnote reference.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                        # it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                      # an InlineObject.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                        # element contains.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                        # if it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of an inline object element can affect content layout as well as the
                        # styling of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                  },
                  &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                      # run of text that all has the same styling.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                        # have multiple insertion IDs if it is a nested suggested change. If empty,
                        # then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                        #
                        # Any non-text elements in the run are replaced with the Unicode character
                        # U+E907.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                      # horizontal line.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a horizontal rule can affect content layout as well as the styling
                        # of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                        # is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                      # spot in the text that is dynamically replaced with content that can change
                      # over time, like a page number.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                      # column break. A column break makes the subsequent text start at the top of
                      # the next column.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                        # a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a column break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                  &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                      # code units.
                },
              ],
              &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                  # suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # ParagraphStyle.
                  &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                    &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                    &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                    &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                    &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                    &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                    &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                        # this suggestion.
                        # suggested change. For any field set to true, there is a new suggested value.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                    },
                    &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                    &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                    &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                    &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                    &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                    &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                    &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                    &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                    &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                    &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                    &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                    &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                    &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                  },
                  &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # paragraph_suggestion_state
                      # to see which fields have changed and their new values.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                      # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                      #
                      #   * The ParagraphStyle on a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The ParagraphStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The ParagraphStyle of the normal text named style inherits
                      #     from the default paragraph style in the Docs editor.
                      #   * The ParagraphStyle on a Paragraph
                      #     element that is contained in a table may inherit its paragraph style from
                      #     the table style.
                      #
                      # If the paragraph style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                        #
                        # Since updating the named style type affects other properties within
                        # ParagraphStyle, the named style type is applied before the other properties
                        # are updated.
                    &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                        # inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                        # page or column as the next paragraph if possible. If unset, the value is
                        # inherited from the parent.
                    &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                    &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                        # parent.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                        # is inherited from the parent.
                    &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                    &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                        # inherited.
                        #
                        # This property is read-only.
                      { # A tab stop within a paragraph.
                        &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                        &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                    ],
                    &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # The top border is rendered when the paragraph above has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                        # inherited from the parent.
                        #
                        # The bottom border is rendered when the paragraph below has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                        # If unset, the value is inherited from the parent.
                        #
                        # The between border is rendered when the adjacent paragraph has the same
                        # border and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;lineSpacing&quot;: 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.
                    &quot;spaceAbove&quot;: { # 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.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                        # column if possible. If unset, the value is inherited from the parent.
                    &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                        # heading.
                        #
                        # This property is read-only.
                    &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # paragraph direction is not inherited.
                    &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                },
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
                # code units.
          },
        ],
        &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote.
      },
    },
    &quot;namedStyles&quot;: { # The named styles. Paragraphs in the document can inherit their # Output only. The named styles of the document.
        # TextStyle and
        # ParagraphStyle from these named styles.
      &quot;styles&quot;: [ # The named styles.
          #
          # There is an entry for each of the possible named style types.
        { # A named style. Paragraphs in the document can inherit their
            # TextStyle and
            # ParagraphStyle from this named style
            # when they have the same named style type.
          &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The paragraph style of this named style.
              #
              # Inherited paragraph styles are represented as unset fields in this message.
              # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
              #
              #   * The ParagraphStyle on a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The ParagraphStyle on a named style
              #     inherits from the normal text named style.
              #   * The ParagraphStyle of the normal text named style inherits
              #     from the default paragraph style in the Docs editor.
              #   * The ParagraphStyle on a Paragraph
              #     element that is contained in a table may inherit its paragraph style from
              #     the table style.
              #
              # If the paragraph style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                #
                # Since updating the named style type affects other properties within
                # ParagraphStyle, the named style type is applied before the other properties
                # are updated.
            &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                # inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                # page or column as the next paragraph if possible. If unset, the value is
                # inherited from the parent.
            &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
            &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                # parent.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                # is inherited from the parent.
            &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
            &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                # inherited.
                #
                # This property is read-only.
              { # A tab stop within a paragraph.
                &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
            &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # The top border is rendered when the paragraph above has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                # inherited from the parent.
                #
                # The bottom border is rendered when the paragraph below has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                # If unset, the value is inherited from the parent.
                #
                # The between border is rendered when the adjacent paragraph has the same
                # border and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;lineSpacing&quot;: 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.
            &quot;spaceAbove&quot;: { # 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.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                # column if possible. If unset, the value is inherited from the parent.
            &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                # heading.
                #
                # This property is read-only.
            &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                # LEFT_TO_RIGHT since
                # paragraph direction is not inherited.
            &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the start of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the end of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;namedStyleType&quot;: &quot;A String&quot;, # The type of this named style.
          &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this named style.
              #
              # Inherited text styles are represented as unset fields in this message. A
              # text style&#x27;s parent depends on where the text style is defined:
              #
              #   * The TextStyle of text in a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The TextStyle on a named style
              #     inherits from the normal text named style.
              #   * The TextStyle of the normal text named style inherits
              #     from the default text style in the Docs editor.
              #   * The TextStyle on a Paragraph element
              #     that is contained in a table may inherit its text style from the table
              #     style.
              #
              # If the text style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
            &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
            &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                # or transparent, depending on the `color` field.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                #
                # 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.
              &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                  #
                  # The font family can be any font from the Font menu in Docs or from
                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                  # unrecognized, the text is rendered in `Arial`.
              &quot;weight&quot;: 42, # The weight of the font. 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.
                  #
                  # The default value is `400` (&quot;normal&quot;).
                  #
                  # The font weight makes up just one component of the rendered font weight.
                  # The rendered weight is determined by a combination of the `weight` and the
                  # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                  #
                  # * If the text is bold and the weight is less than `400`, the rendered
                  #   weight is 400.
                  # * If the text is bold and the weight is greater than or equal to `400` but
                  #   is less than `700`, the rendered weight is `700`.
                  # * If the weight is greater than or equal to `700`, the rendered weight is
                  #   equal to the weight.
                  # * If the text is not bold, the rendered weight is equal to the weight.
            },
            &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;italic&quot;: True or False, # Whether or not the text is italicized.
            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                # or transparent, depending on the `color` field.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;underline&quot;: True or False, # Whether or not the text is underlined.
            &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                #   default link color 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 `&quot;ABC\n123&quot;`,
                #   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.
              &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
              &quot;url&quot;: &quot;A String&quot;, # An external URL.
              &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
            },
            &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
            &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
          },
        },
      ],
    },
    &quot;namedRanges&quot;: { # Output only. The named ranges in the document, keyed by name.
      &quot;a_key&quot;: { # A collection of all the NamedRanges in the
          # document that share a given name.
        &quot;namedRanges&quot;: [ # The NamedRanges that share the same name.
          { # A collection of Ranges with the same named range
              # ID.
              #
              # Named ranges allow developers to associate parts of a document with an
              # arbitrary user-defined label so their contents can be programmatically read
              # or edited at a later time. A document can contain multiple named ranges with
              # the same name, but every named range has a unique ID.
              #
              # A named range is created with a single Range,
              # and content inserted inside a named range generally expands that range.
              # However, certain document changes can cause the range to be split into
              # multiple ranges.
              #
              # Named ranges are not private. All applications and collaborators that have
              # access to the document can see its named ranges.
            &quot;name&quot;: &quot;A String&quot;, # The name of the named range.
            &quot;namedRangeId&quot;: &quot;A String&quot;, # The ID of the named range.
            &quot;ranges&quot;: [ # The ranges that belong to this named range.
              { # Specifies a contiguous range of text.
                &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                    # An empty segment ID signifies the document&#x27;s body.
                &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                    #
                    # In all current uses, a start index must be provided. This field is an
                    # Int32Value in order to accommodate future use cases with open-ended ranges.
                &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                    #
                    # In all current uses, an end index must be provided. This field is an
                    # Int32Value in order to accommodate future use cases with open-ended ranges.
              },
            ],
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The name that all the named ranges share.
      },
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(documentId, suggestionsViewMode=None, x__xgafv=None)</code>
  <pre>Gets the latest version of the specified document.

Args:
  documentId: string, The ID of the document to retrieve. (required)
  suggestionsViewMode: string, The suggestions view mode to apply to the document. This allows viewing the
document with all suggestions inline, accepted or rejected. If one is not
specified, DEFAULT_FOR_CURRENT_ACCESS is
used.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Google Docs document.
    &quot;title&quot;: &quot;A String&quot;, # The title of the document.
    &quot;suggestionsViewMode&quot;: &quot;A String&quot;, # Output only. The suggestions view mode applied to the document.
        #
        # Note: When editing a document, changes must be based on a document with
        # SUGGESTIONS_INLINE.
    &quot;documentId&quot;: &quot;A String&quot;, # Output only. The ID of the document.
    &quot;footers&quot;: { # Output only. The footers in the document, keyed by footer ID.
      &quot;a_key&quot;: { # A document footer.
        &quot;content&quot;: [ # The contents of the footer.
            #
            # The indexes for a footer&#x27;s content begin at zero.
          { # A StructuralElement describes content that provides structure to the
              # document.
            &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
                # table.
              &quot;rows&quot;: 42, # Number of rows in the table.
              &quot;columns&quot;: 42, # Number of columns in the table.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells.
              &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
                &quot;tableColumnProperties&quot;: [ # The properties of each column.
                    #
                    # Note that in Docs, tables contain rows and rows contain cells, similar to
                    # HTML. So the properties for a row can be found on the row&#x27;s
                    # table_row_style.
                  { # The properties of a column in a table.
                    &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                        # FIXED_WIDTH.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;tableRows&quot;: [ # The contents and style of each row.
                { # The contents and style of a row in a Table.
                  &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a
                        # TableRowStyle.
                      &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_row_style_suggestion_state
                          # to see which fields have changed and their new values.
                        &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                            # at a height equal to or greater than this value in order to show all the
                            # content in the row&#x27;s cells.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                      &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                      },
                    },
                  },
                  &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                      #
                      # It is possible for a table to be non-rectangular, so some rows may have a
                      # different number of cells than other rows in the same table.
                    { # The contents and style of a cell in a Table.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                      &quot;content&quot;: [ # The content of the cell.
                        # Object with schema name: StructuralElement
                      ],
                      &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                      &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                        &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                          &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                              # the changes made in this suggestion. This can be used along with the
                              # table_cell_style_suggestion_state
                              # to see which fields have changed and their new values.
                              #
                              # Inherited table cell styles are represented as unset fields in this message.
                              # A table cell style can inherit from the table&#x27;s style.
                            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;columnSpan&quot;: 42, # The column span of the cell.
                                #
                                # This property is read-only.
                            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                                # matches the alignment for newly created table cells in the Docs editor.
                            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            &quot;rowSpan&quot;: 42, # The row span of the cell.
                                #
                                # This property is read-only.
                          },
                          &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                              # For any field set to true, there is a new suggested value.
                            &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                            &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                            &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                            &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                            &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                            &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                            &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                            &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                            &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                            &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                            &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                            &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                          },
                        },
                      },
                      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                          # of this content.
                        &quot;A String&quot;,
                      ],
                      &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                          # may have multiple insertion IDs if it is a nested suggested change. If
                          # empty, then this is not a suggested insertion.
                        &quot;A String&quot;,
                      ],
                    },
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                  # multiple insertion IDs if it is a nested suggested change. If empty, then
                  # this is not a suggested insertion.
                &quot;A String&quot;,
              ],
            },
            &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
                # a table of contents.
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                  # is a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;content&quot;: [ # The content of the table of contents.
                # Object with schema name: StructuralElement
              ],
            },
            &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
                # units.
            &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
                # section break. A section is a range of content which has the same
                # SectionStyle. A section break represents
                # the start of a new section, and the section style applies to the section
                # after the section break.
                #
                # The document body always begins with a section break.
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                  # a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
                &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a footer margin is being respected for this
                    # section
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                    # LEFT_TO_RIGHT.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a header margin is being respected for this
                    # section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                    # Updating right margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                    #
                    # If empty, the section contains one column with the default properties in
                    # the Docs editor.
                    # A section can be updated to have no more than three columns.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property will result in a 400 bad request error.
                  { # Properties that apply to a section&#x27;s column.
                    &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                    # Updating left margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_footer_id.
                    #
                    # This property is read-only.
                &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the headers on even pages in the section. If it
                    # is false, the headers on even pages uses the default_header_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_header_id.
                    #
                    # This property is read-only.
                &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                    # section. If unset, page numbering continues from the previous section.
                    # If the value is unset in the first
                    # SectionBreak, refer to DocumentStyle&#x27;s
                    # page_number_start.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_header_id.
                    #
                    # This property is read-only.
                &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the footers on even pages in the section. If it
                    # is false, the footers on even pages uses the default_footer_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_footer_id.
                    #
                    # This property is read-only.
                &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                    #
                    # This style can be set even when there is one column in the section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                    # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                    # use_first_page_header_footer for the
                    # first section. If the value is unset for subsequent sectors, it should be
                    # interpreted as false.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the header on the first page of the section. If
                    # it is false, the header on the first page of the section uses the
                    # default_header_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_header_id.
                    #
                    # This property is read-only.
                &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the footer on the first page of the section. If
                    # it is false, the footer on the first page of the section uses the
                    # default_footer_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_footer_id.
                    #
                    # This property is read-only.
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
            },
            &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
                # paragraph. A paragraph is a range of content that is terminated with a
                # newline character.
              &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                  # paragraph, keyed by suggestion ID.
                &quot;a_key&quot;: { # A collection of object IDs.
                  &quot;objectIds&quot;: [ # The object IDs.
                    &quot;A String&quot;,
                  ],
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                  # belong to a list.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
              &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
                &quot;A String&quot;,
              ],
              &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
                &quot;a_key&quot;: { # A suggested change to a Bullet.
                  &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                      # Bullet have been changed in this suggestion.
                      # Bullet have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # list_id.
                    &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # nesting_level.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                        # suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                  },
                  &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                      # in this suggestion. This can be used along with the
                      # bullet_suggestion_state to see which
                      # fields have changed and their new values.
                    &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                  },
                },
              },
              &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
                { # A ParagraphElement describes content within a
                    # Paragraph.
                  &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                      # page break. A page break makes the subsequent text start at the top of the
                      # next page.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a page break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                      # equation.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                      # footnote reference. A footnote reference is the inline content rendered with
                      # a number and is used to identify the footnote.
                    &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                        # contains the content of this footnote reference.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                        # it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                      # an InlineObject.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                        # element contains.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                        # if it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of an inline object element can affect content layout as well as the
                        # styling of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                  },
                  &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                      # run of text that all has the same styling.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                        # have multiple insertion IDs if it is a nested suggested change. If empty,
                        # then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                        #
                        # Any non-text elements in the run are replaced with the Unicode character
                        # U+E907.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                      # horizontal line.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a horizontal rule can affect content layout as well as the styling
                        # of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                        # is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                      # spot in the text that is dynamically replaced with content that can change
                      # over time, like a page number.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                      # column break. A column break makes the subsequent text start at the top of
                      # the next column.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                        # a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a column break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                  &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                      # code units.
                },
              ],
              &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                  # suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # ParagraphStyle.
                  &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                    &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                    &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                    &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                    &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                    &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                    &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                        # this suggestion.
                        # suggested change. For any field set to true, there is a new suggested value.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                    },
                    &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                    &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                    &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                    &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                    &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                    &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                    &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                    &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                    &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                    &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                    &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                    &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                    &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                  },
                  &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # paragraph_suggestion_state
                      # to see which fields have changed and their new values.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                      # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                      #
                      #   * The ParagraphStyle on a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The ParagraphStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The ParagraphStyle of the normal text named style inherits
                      #     from the default paragraph style in the Docs editor.
                      #   * The ParagraphStyle on a Paragraph
                      #     element that is contained in a table may inherit its paragraph style from
                      #     the table style.
                      #
                      # If the paragraph style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                        #
                        # Since updating the named style type affects other properties within
                        # ParagraphStyle, the named style type is applied before the other properties
                        # are updated.
                    &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                        # inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                        # page or column as the next paragraph if possible. If unset, the value is
                        # inherited from the parent.
                    &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                    &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                        # parent.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                        # is inherited from the parent.
                    &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                    &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                        # inherited.
                        #
                        # This property is read-only.
                      { # A tab stop within a paragraph.
                        &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                        &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                    ],
                    &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # The top border is rendered when the paragraph above has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                        # inherited from the parent.
                        #
                        # The bottom border is rendered when the paragraph below has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                        # If unset, the value is inherited from the parent.
                        #
                        # The between border is rendered when the adjacent paragraph has the same
                        # border and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;lineSpacing&quot;: 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.
                    &quot;spaceAbove&quot;: { # 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.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                        # column if possible. If unset, the value is inherited from the parent.
                    &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                        # heading.
                        #
                        # This property is read-only.
                    &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # paragraph direction is not inherited.
                    &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                },
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
                # code units.
          },
        ],
        &quot;footerId&quot;: &quot;A String&quot;, # The ID of the footer.
      },
    },
    &quot;body&quot;: { # The document body. # Output only. The main body of the document.
        #
        # The body typically contains the full document contents except for
        # headers, footers
        # and footnotes.
      &quot;content&quot;: [ # The contents of the body.
          #
          # The indexes for the body&#x27;s content begin at zero.
        { # A StructuralElement describes content that provides structure to the
            # document.
          &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
              # table.
            &quot;rows&quot;: 42, # Number of rows in the table.
            &quot;columns&quot;: 42, # Number of columns in the table.
                #
                # It is possible for a table to be non-rectangular, so some rows may have a
                # different number of cells.
            &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
              &quot;tableColumnProperties&quot;: [ # The properties of each column.
                  #
                  # Note that in Docs, tables contain rows and rows contain cells, similar to
                  # HTML. So the properties for a row can be found on the row&#x27;s
                  # table_row_style.
                { # The properties of a column in a table.
                  &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                      # FIXED_WIDTH.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;tableRows&quot;: [ # The contents and style of each row.
              { # The contents and style of a row in a Table.
                &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                  &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                      # at a height equal to or greater than this value in order to show all the
                      # content in the row&#x27;s cells.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                  &quot;a_key&quot;: { # A suggested change to a
                      # TableRowStyle.
                    &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                        # the changes made in this suggestion. This can be used along with the
                        # table_row_style_suggestion_state
                        # to see which fields have changed and their new values.
                      &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                          # at a height equal to or greater than this value in order to show all the
                          # content in the row&#x27;s cells.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                    },
                  },
                },
                &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                    #
                    # It is possible for a table to be non-rectangular, so some rows may have a
                    # different number of cells than other rows in the same table.
                  { # The contents and style of a cell in a Table.
                    &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                        #
                        # Inherited table cell styles are represented as unset fields in this message.
                        # A table cell style can inherit from the table&#x27;s style.
                      &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                          #
                          # Table cell borders cannot be transparent. To hide a table cell border, make
                          # its width 0.
                        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                            #
                            # This color cannot be transparent.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                      },
                      &quot;columnSpan&quot;: 42, # The column span of the cell.
                          #
                          # This property is read-only.
                      &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                          # matches the alignment for newly created table cells in the Docs editor.
                      &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;rowSpan&quot;: 42, # The row span of the cell.
                          #
                          # This property is read-only.
                    },
                    &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                    &quot;content&quot;: [ # The content of the cell.
                      # Object with schema name: StructuralElement
                    ],
                    &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                    &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                        &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # table_cell_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited table cell styles are represented as unset fields in this message.
                            # A table cell style can inherit from the table&#x27;s style.
                          &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                              #
                              # Table cell borders cannot be transparent. To hide a table cell border, make
                              # its width 0.
                            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                #
                                # This color cannot be transparent.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                          },
                          &quot;columnSpan&quot;: 42, # The column span of the cell.
                              #
                              # This property is read-only.
                          &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                              # matches the alignment for newly created table cells in the Docs editor.
                          &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;rowSpan&quot;: 42, # The row span of the cell.
                              #
                              # This property is read-only.
                        },
                        &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                          &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                          &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                          &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                          &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                          &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                          &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                          &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                          &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                          &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                ],
                &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                    # may have multiple insertion IDs if it is a nested suggested change. If
                    # empty, then this is not a suggested insertion.
                  &quot;A String&quot;,
                ],
                &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                    # of this content.
                  &quot;A String&quot;,
                ],
                &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
              },
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                # multiple insertion IDs if it is a nested suggested change. If empty, then
                # this is not a suggested insertion.
              &quot;A String&quot;,
            ],
          },
          &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
              # a table of contents.
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                # is a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;content&quot;: [ # The content of the table of contents.
              # Object with schema name: StructuralElement
            ],
          },
          &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
              # units.
          &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
              # section break. A section is a range of content which has the same
              # SectionStyle. A section break represents
              # the start of a new section, and the section style applies to the section
              # after the section break.
              #
              # The document body always begins with a section break.
            &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                # a nested suggested change. If empty, then this is not a suggested
                # insertion.
              &quot;A String&quot;,
            ],
            &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
              &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a footer margin is being respected for this
                  # section
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                  # LEFT_TO_RIGHT.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                  # updated, use_custom_header_footer_margins is set
                  # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                  # DocumentStyle indicates if a header margin is being respected for this
                  # section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                  # Updating right margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                  #
                  # If empty, the section contains one column with the default properties in
                  # the Docs editor.
                  # A section can be updated to have no more than three columns.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property will result in a 400 bad request error.
                { # Properties that apply to a section&#x27;s column.
                  &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                  # Updating left margin causes columns in this section to resize. Since
                  # the margin affects column width, it is applied before column properties.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_footer_id.
                  #
                  # This property is read-only.
              &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the headers on even pages in the section. If it
                  # is false, the headers on even pages uses the default_header_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_header_id.
                  #
                  # This property is read-only.
              &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                  # section. If unset, page numbering continues from the previous section.
                  # If the value is unset in the first
                  # SectionBreak, refer to DocumentStyle&#x27;s
                  # page_number_start.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                  # previous SectionBreak&#x27;s SectionStyle.
                  # If the value is unset in the first SectionBreak, it inherits from
                  # DocumentStyle&#x27;s default_header_id.
                  #
                  # This property is read-only.
              &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                  # DocumentStyle&#x27;s use_even_page_header_footer is true,
                  # this value is used for the footers on even pages in the section. If it
                  # is false, the footers on even pages uses the default_footer_id. If unset, the value
                  # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # even_page_footer_id.
                  #
                  # This property is read-only.
              &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                  #
                  # This style can be set even when there is one column in the section.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                  # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                  # use_first_page_header_footer for the
                  # first section. If the value is unset for subsequent sectors, it should be
                  # interpreted as false.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
              &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the header on the first page of the section. If
                  # it is false, the header on the first page of the section uses the
                  # default_header_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_header_id.
                  #
                  # This property is read-only.
              &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                  # If use_first_page_header_footer is true,
                  # this value is used for the footer on the first page of the section. If
                  # it is false, the footer on the first page of the section uses the
                  # default_footer_id.
                  # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                  # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                  # first_page_footer_id.
                  #
                  # This property is read-only.
              &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                  #
                  # When updating this property, setting a concrete value is required.
                  # Unsetting this property results in a 400 bad request error.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
            },
            &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                # of this content.
              &quot;A String&quot;,
            ],
          },
          &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
              # paragraph. A paragraph is a range of content that is terminated with a
              # newline character.
            &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                # paragraph, keyed by suggestion ID.
              &quot;a_key&quot;: { # A collection of object IDs.
                &quot;objectIds&quot;: [ # The object IDs.
                  &quot;A String&quot;,
                ],
              },
            },
            &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                # belong to a list.
              &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
            },
            &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
              &quot;A String&quot;,
            ],
            &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
              &quot;a_key&quot;: { # A suggested change to a Bullet.
                &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                    # Bullet have been changed in this suggestion.
                    # Bullet have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # list_id.
                  &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                      # nesting_level.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                },
                &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                    # in this suggestion. This can be used along with the
                    # bullet_suggestion_state to see which
                    # fields have changed and their new values.
                  &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                },
              },
            },
            &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
              { # A ParagraphElement describes content within a
                  # Paragraph.
                &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                    # page break. A page break makes the subsequent text start at the top of the
                    # next page.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a page break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                    # equation.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                    # footnote reference. A footnote reference is the inline content rendered with
                    # a number and is used to identify the footnote.
                  &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                      # contains the content of this footnote reference.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                      # it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                    # an InlineObject.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                      # element contains.
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                      # if it is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of an inline object element can affect content layout as well as the
                      # styling of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                },
                &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                    # run of text that all has the same styling.
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                      # have multiple insertion IDs if it is a nested suggested change. If empty,
                      # then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                      #
                      # Any non-text elements in the run are replaced with the Unicode character
                      # U+E907.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                    # horizontal line.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a horizontal rule can affect content layout as well as the styling
                      # of text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                      # suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                      # is a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                    # spot in the text that is dynamically replaced with content that can change
                    # over time, like a page number.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                },
                &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                    # column break. A column break makes the subsequent text start at the top of
                    # the next column.
                  &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                      # ID.
                    &quot;a_key&quot;: { # A suggested change to a TextStyle.
                      &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                        &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                        &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                        &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                        &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                        &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                        &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                        &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                        &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                        &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                        &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                      },
                      &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # text_style_suggestion_state
                          # to see which fields have changed and their new values.
                          #
                          # Inherited text styles are represented as unset fields in this message. A
                          # text style&#x27;s parent depends on where the text style is defined:
                          #
                          #   * The TextStyle of text in a Paragraph
                          #     inherits from the paragraph&#x27;s corresponding named style type.
                          #   * The TextStyle on a named style
                          #     inherits from the normal text named style.
                          #   * The TextStyle of the normal text named style inherits
                          #     from the default text style in the Docs editor.
                          #   * The TextStyle on a Paragraph element
                          #     that is contained in a table may inherit its text style from the table
                          #     style.
                          #
                          # If the text style does not inherit from a parent, unsetting fields will
                          # revert the style to a value matching the defaults in the Docs editor.
                        &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                        &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                        &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                            #
                            # 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.
                          &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                              #
                              # The font family can be any font from the Font menu in Docs or from
                              # [Google Fonts] (https://fonts.google.com/). If the font name is
                              # unrecognized, the text is rendered in `Arial`.
                          &quot;weight&quot;: 42, # The weight of the font. 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.
                              #
                              # The default value is `400` (&quot;normal&quot;).
                              #
                              # The font weight makes up just one component of the rendered font weight.
                              # The rendered weight is determined by a combination of the `weight` and the
                              # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                              #
                              # * If the text is bold and the weight is less than `400`, the rendered
                              #   weight is 400.
                              # * If the text is bold and the weight is greater than or equal to `400` but
                              #   is less than `700`, the rendered weight is `700`.
                              # * If the weight is greater than or equal to `700`, the rendered weight is
                              #   equal to the weight.
                              # * If the text is not bold, the rendered weight is equal to the weight.
                        },
                        &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                            # or transparent, depending on the `color` field.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                        &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                            #   default link color 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 `&quot;ABC\n123&quot;`,
                            #   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.
                          &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                          &quot;url&quot;: &quot;A String&quot;, # An external URL.
                          &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                        },
                        &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                        &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                      },
                    },
                  },
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                      # a nested suggested change. If empty, then this is not a suggested
                      # insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                      #
                      # Similar to text content, like text runs and footnote references, the text
                      # style of a column break can affect content layout as well as the styling of
                      # text inserted adjacent to it.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                },
                &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                    # code units.
              },
            ],
            &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                # suggestion ID.
              &quot;a_key&quot;: { # A suggested change to a
                  # ParagraphStyle.
                &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                  &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                  &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                  &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                  &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                  &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                      # this suggestion.
                      # suggested change. For any field set to true, there is a new suggested value.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                  },
                  &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                  &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                  &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                  &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                  &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                  &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                  &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                  &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                  &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                  &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                  &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                  &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                },
                &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                    # the changes made in this suggestion. This can be used along with the
                    # paragraph_suggestion_state
                    # to see which fields have changed and their new values.
                    #
                    # Inherited paragraph styles are represented as unset fields in this message.
                    # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                    #
                    #   * The ParagraphStyle on a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The ParagraphStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The ParagraphStyle of the normal text named style inherits
                    #     from the default paragraph style in the Docs editor.
                    #   * The ParagraphStyle on a Paragraph
                    #     element that is contained in a table may inherit its paragraph style from
                    #     the table style.
                    #
                    # If the paragraph style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                      #
                      # Since updating the named style type affects other properties within
                      # ParagraphStyle, the named style type is applied before the other properties
                      # are updated.
                  &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                      # inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                      # page or column as the next paragraph if possible. If unset, the value is
                      # inherited from the parent.
                  &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                  &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                      # parent.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                  },
                  &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                      # is inherited from the parent.
                  &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                  &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                      # inherited.
                      #
                      # This property is read-only.
                    { # A tab stop within a paragraph.
                      &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                      &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                  ],
                  &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # The top border is rendered when the paragraph above has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                      # inherited from the parent.
                      #
                      # The bottom border is rendered when the paragraph below has different border
                      # and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                      # If unset, the value is inherited from the parent.
                      #
                      # The between border is rendered when the adjacent paragraph has the same
                      # border and indent properties.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;lineSpacing&quot;: 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.
                  &quot;spaceAbove&quot;: { # 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.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                      # column if possible. If unset, the value is inherited from the parent.
                  &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                      # heading.
                      #
                      # This property is read-only.
                  &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                      # LEFT_TO_RIGHT since
                      # paragraph direction is not inherited.
                  &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                      # from the parent.
                      #
                      # Paragraph borders cannot be partially updated. When making
                      # changes to a paragraph border the new border must be specified in
                      # its entirety.
                    &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                    &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the start of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                      # the end of the text, based on the current paragraph direction. If unset,
                      # the value is inherited from the parent.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              },
            },
            &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                #
                # Inherited paragraph styles are represented as unset fields in this message.
                # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                #
                #   * The ParagraphStyle on a Paragraph
                #     inherits from the paragraph&#x27;s corresponding named style type.
                #   * The ParagraphStyle on a named style
                #     inherits from the normal text named style.
                #   * The ParagraphStyle of the normal text named style inherits
                #     from the default paragraph style in the Docs editor.
                #   * The ParagraphStyle on a Paragraph
                #     element that is contained in a table may inherit its paragraph style from
                #     the table style.
                #
                # If the paragraph style does not inherit from a parent, unsetting fields will
                # revert the style to a value matching the defaults in the Docs editor.
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                  #
                  # Since updating the named style type affects other properties within
                  # ParagraphStyle, the named style type is applied before the other properties
                  # are updated.
              &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                  # inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                  # page or column as the next paragraph if possible. If unset, the value is
                  # inherited from the parent.
              &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
              &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                  # parent.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
              },
              &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                  # is inherited from the parent.
              &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
              &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                  # inherited.
                  #
                  # This property is read-only.
                { # A tab stop within a paragraph.
                  &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                  &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
              ],
              &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # The top border is rendered when the paragraph above has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                  # inherited from the parent.
                  #
                  # The bottom border is rendered when the paragraph below has different border
                  # and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                  # If unset, the value is inherited from the parent.
                  #
                  # The between border is rendered when the adjacent paragraph has the same
                  # border and indent properties.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;lineSpacing&quot;: 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.
              &quot;spaceAbove&quot;: { # 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.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                  # column if possible. If unset, the value is inherited from the parent.
              &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                  # heading.
                  #
                  # This property is read-only.
              &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                  # LEFT_TO_RIGHT since
                  # paragraph direction is not inherited.
              &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                  # from the parent.
                  #
                  # Paragraph borders cannot be partially updated. When making
                  # changes to a paragraph border the new border must be specified in
                  # its entirety.
                &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the start of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                  # the end of the text, based on the current paragraph direction. If unset,
                  # the value is inherited from the parent.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
          },
          &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
              # code units.
        },
      ],
    },
    &quot;documentStyle&quot;: { # The style of the document. # Output only. The style of the document.
      &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
          # use_even_page_header_footer determines
          # whether to use the default_header_id or this value for the
          # header on even pages. If not set, there is no even page header.
          #
          # This property is read-only.
      &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
          #
          # Updating the left page margin on the document style clears the left page
          # margin on all section styles. It may also cause columns to resize in all
          # sections.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
          # margin_header,
          # SectionStyle
          # margin_header and
          # DocumentStyle
          # margin_footer,
          # SectionStyle
          # margin_footer are
          # respected. When false, the default values in the Docs editor for header and
          # footer margin are used.
          #
          # This property is read-only.
      &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
          # page.
      &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
        &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
        &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
          &quot;magnitude&quot;: 3.14, # The magnitude.
        },
      },
      &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
          # footer.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
          # use_even_page_header_footer determines
          # whether to use the default_footer_id or this value for the
          # footer on even pages. If not set, there is no even page footer.
          #
          # This property is read-only.
      &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
          #
          # Updating the bottom page margin on the document style clears the bottom
          # page margin on all section styles.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
          # background color.
        &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
              # a transparent color.
            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
            },
          },
        },
      },
      &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
      &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
          #
          # Updating the right page margin on the document style clears the right page
          # margin on all section styles. It may also cause columns to resize in all
          # sections.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
          # pages.
      &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
          #
          # Updating the top page margin on the document style clears the top page
          # margin on all section styles.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
          #
          # This property is read-only.
      &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
          # header.
        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
        &quot;magnitude&quot;: 3.14, # The magnitude.
      },
      &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
          # a unique footer for the first page does not exist. The value of
          # use_first_page_header_footer determines
          # whether to use the default_footer_id or this value for the
          # footer on the first page. If not set, there is no first page footer.
          #
          # This property is read-only.
      &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
          #
          # This property is read-only.
      &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
          # a unique header for the first page does not exist.
          # The value of use_first_page_header_footer determines
          # whether to use the default_header_id or this value for the
          # header on the first page. If not set, there is no first page header.
          #
          # This property is read-only.
    },
    &quot;suggestedDocumentStyleChanges&quot;: { # Output only. The suggested changes to the style of the document, keyed by
        # suggestion ID.
      &quot;a_key&quot;: { # A suggested change to the DocumentStyle.
        &quot;documentStyle&quot;: { # The style of the document. # A DocumentStyle that only includes
            # the changes made in this suggestion. This can be used along with the
            # document_style_suggestion_state
            # to see which fields have changed and their new values.
          &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. The value of
              # use_even_page_header_footer determines
              # whether to use the default_header_id or this value for the
              # header on even pages. If not set, there is no even page header.
              #
              # This property is read-only.
          &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin.
              #
              # Updating the left page margin on the document style clears the left page
              # margin on all section styles. It may also cause columns to resize in all
              # sections.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;useCustomHeaderFooterMargins&quot;: True or False, # Indicates whether DocumentStyle
              # margin_header,
              # SectionStyle
              # margin_header and
              # DocumentStyle
              # margin_footer,
              # SectionStyle
              # margin_footer are
              # respected. When false, the default values in the Docs editor for header and
              # footer margin are used.
              #
              # This property is read-only.
          &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
              # page.
          &quot;pageSize&quot;: { # A width and height. # The size of a page in the document.
            &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the bottom of the page and the contents of the
              # footer.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. The value of
              # use_even_page_header_footer determines
              # whether to use the default_footer_id or this value for the
              # footer on even pages. If not set, there is no even page footer.
              #
              # This property is read-only.
          &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin.
              #
              # Updating the bottom page margin on the document style clears the bottom
              # page margin on all section styles.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;background&quot;: { # Represents the background of a document. # The background of the document. Documents cannot have a transparent
              # background color.
            &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The background color.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
          },
          &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages.
          &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin.
              #
              # Updating the right page margin on the document style clears the right page
              # margin on all section styles. It may also cause columns to resize in all
              # sections.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;useEvenPageHeaderFooter&quot;: True or False, # Indicates whether to use the even page header / footer IDs for the even
              # pages.
          &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin.
              #
              # Updating the top page margin on the document style clears the top page
              # margin on all section styles.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If not set, there is no default header.
              #
              # This property is read-only.
          &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The amount of space between the top of the page and the contents of the
              # header.
            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
            &quot;magnitude&quot;: 3.14, # The magnitude.
          },
          &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page. If not set then
              # a unique footer for the first page does not exist. The value of
              # use_first_page_header_footer determines
              # whether to use the default_footer_id or this value for the
              # footer on the first page. If not set, there is no first page footer.
              #
              # This property is read-only.
          &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If not set, there is no default footer.
              #
              # This property is read-only.
          &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page. If not set then
              # a unique header for the first page does not exist.
              # The value of use_first_page_header_footer determines
              # whether to use the default_header_id or this value for the
              # header on the first page. If not set, there is no first page header.
              #
              # This property is read-only.
        },
        &quot;documentStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base DocumentStyle have been changed in this suggestion.
            # For any field set to true, there is a new suggested value.
          &quot;useFirstPageHeaderFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to use_first_page_header_footer.
          &quot;firstPageHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to first_page_header_id.
          &quot;marginHeaderSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_header.
          &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
          &quot;evenPageHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to even_page_header_id.
          &quot;evenPageFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to even_page_footer_id.
          &quot;pageSizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
              # suggestion.
              # For any field set to true, the Size has
              # a new suggested value.
            &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
            &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
          },
          &quot;firstPageFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to first_page_footer_id.
          &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
          &quot;pageNumberStartSuggested&quot;: True or False, # Indicates if there was a suggested change to page_number_start.
          &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
          &quot;useEvenPageHeaderFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to use_even_page_header_footer.
          &quot;useCustomHeaderFooterMarginsSuggested&quot;: True or False, # Indicates if there was a suggested change to
              # use_custom_header_footer_margins.
          &quot;backgroundSuggestionState&quot;: { # A mask that indicates which of the fields on the base Background have been changed in this suggestion. # A mask that indicates which of the fields in background have been changed in this
              # suggestion.
              # For any field set to true, the Backgound has a new suggested value.
            &quot;backgroundColorSuggested&quot;: True or False, # Indicates whether the current background color has been modified in this
                # suggestion.
          },
          &quot;defaultHeaderIdSuggested&quot;: True or False, # Indicates if there was a suggested change to default_header_id.
          &quot;marginFooterSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_footer.
          &quot;defaultFooterIdSuggested&quot;: True or False, # Indicates if there was a suggested change to default_footer_id.
          &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
        },
      },
    },
    &quot;suggestedNamedStylesChanges&quot;: { # Output only. The suggested changes to the named styles of the document,
        # keyed by suggestion ID.
      &quot;a_key&quot;: { # A suggested change to the NamedStyles.
        &quot;namedStyles&quot;: { # The named styles. Paragraphs in the document can inherit their # A NamedStyles that only includes the
            # changes made in this suggestion. This can be used along with the
            # named_styles_suggestion_state to
            # see which fields have changed and their new values.
            # TextStyle and
            # ParagraphStyle from these named styles.
          &quot;styles&quot;: [ # The named styles.
              #
              # There is an entry for each of the possible named style types.
            { # A named style. Paragraphs in the document can inherit their
                # TextStyle and
                # ParagraphStyle from this named style
                # when they have the same named style type.
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The paragraph style of this named style.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The type of this named style.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this named style.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
            },
          ],
        },
        &quot;namedStylesSuggestionState&quot;: { # The suggestion state of a NamedStyles # A mask that indicates which of the fields on the base NamedStyles have been changed in this suggestion.
            # message.
          &quot;stylesSuggestionStates&quot;: [ # A mask that indicates which of the fields on the corresponding NamedStyle in styles have been changed in this
              # suggestion.
              #
              # The order of these named style suggestion states match the order of the
              # corresponding named style within the named styles suggestion.
            { # A suggestion state of a NamedStyle message.
              &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                  # suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
              },
              &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type that this suggestion state corresponds to.
                  #
                  # This field is provided as a convenience for matching the
                  # NamedStyleSuggestionState with its corresponding NamedStyle.
              &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields in paragraph style have been changed in this
                  # suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                    # this suggestion.
                    # suggested change. For any field set to true, there is a new suggested value.
                  &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                },
                &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
              },
            },
          ],
        },
      },
    },
    &quot;positionedObjects&quot;: { # Output only. The positioned objects in the document, keyed by object ID.
      &quot;a_key&quot;: { # An object that is tethered to a Paragraph
          # and positioned relative to the beginning of the paragraph. A PositionedObject
          # contains an EmbeddedObject such as an
          # image.
        &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
            # of this content.
          &quot;A String&quot;,
        ],
        &quot;objectId&quot;: &quot;A String&quot;, # The ID of this positioned object.
        &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
            # insertion.
        &quot;positionedObjectProperties&quot;: { # Properties of a PositionedObject. # The properties of this positioned object.
          &quot;positioning&quot;: { # The positioning of a PositionedObject. The positioned object is positioned # The positioning of this positioned object relative to the newline of the
              # Paragraph that references this positioned
              # object.
              # relative to the beginning of the Paragraph
              # it is tethered to.
            &quot;leftOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the left edge of the positioned object relative to the
                # beginning of the Paragraph it is tethered
                # to. The exact positioning of the object can depend on other content in the
                # document and the document&#x27;s styling.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;layout&quot;: &quot;A String&quot;, # The layout of this positioned object.
            &quot;topOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the top edge of the positioned object relative to the
                # beginning of the Paragraph it is tethered
                # to. The exact positioning of the object can depend on other content in the
                # document and the document&#x27;s styling.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this positioned object.
            &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                # both combined to display alt text.
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
              &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
              &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                  #
                  # The crop rectangle is represented using fractional offsets from the original
                  # content&#x27;s four edges.
                  #
                  # - If the offset is in the interval (0, 1), the corresponding edge of crop
                  # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                  # - If the offset is negative or greater than 1, the corresponding edge of crop
                  # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                  # - If all offsets and rotation angle are 0, the image is not cropped.
                &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                    # from the top edge of the original content as a fraction of the original
                    # content&#x27;s height.
                &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                    # from the left edge of the original content as a fraction of the original
                    # content&#x27;s width.
                &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                    # radians. Rotation is applied after the offsets.
                &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                    # is from the right edge of the original content as a fraction of the
                    # original content&#x27;s width.
                &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                    # is from the bottom edge of the original content as a fraction of the
                    # original content&#x27;s height.
              },
              &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                  # empty.
              &quot;transparency&quot;: 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.
              &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                  # This URI is tagged with the account of the requester. Anyone with the URI
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the document&#x27;s sharing settings change.
            },
            &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
              &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                # combined to display alt text.
            &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
            },
            &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                # a reference to the source Sheets chart when the embedded object is a linked
                # chart.
                #
                # If unset, then the embedded object is not linked.
              &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
            },
            &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
        },
        &quot;suggestedPositionedObjectPropertiesChanges&quot;: { # The suggested changes to the positioned object properties, keyed by
            # suggestion ID.
          &quot;a_key&quot;: { # A suggested change to PositionedObjectProperties.
            &quot;positionedObjectPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                # PositionedObjectProperties have been changed in this
                # suggestion.
                # PositionedObjectProperties
                # have been changed in this suggestion. For any field set to true, there is a
                # new suggested value.
              &quot;positioningSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in positioning have been
                  # changed in this suggestion.
                  # PositionedObjectPositioning have been changed in this
                  # suggestion. For any field set to true, there is a new suggested value.
                &quot;leftOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to left_offset.
                &quot;topOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to top_offset.
                &quot;layoutSuggested&quot;: True or False, # Indicates if there was a suggested change to layout.
              },
              &quot;embeddedObjectSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. # A mask that indicates which of the fields in embedded_object have been
                  # changed in this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
                &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
                &quot;descriptionSuggested&quot;: True or False, # Indicates if there was a suggested change to description.
                &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
                &quot;sizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
                    # suggestion.
                    # For any field set to true, the Size has
                    # a new suggested value.
                  &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                },
                &quot;titleSuggested&quot;: True or False, # Indicates if there was a suggested change to title.
                &quot;linkedContentReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in linked_content_reference have been
                    # changed in this suggestion.
                    # LinkedContentReference have
                    # been changed in this suggestion. For any field set to true, there is a new
                    # suggested value.
                  &quot;sheetsChartReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base SheetsChartReference have been changed in this # A mask that indicates which of the fields in sheets_chart_reference have
                      # been changed in this suggestion.
                      # suggestion. For any field set to true, there is a new suggested value.
                    &quot;chartIdSuggested&quot;: True or False, # Indicates if there was a suggested change to chart_id.
                    &quot;spreadsheetIdSuggested&quot;: True or False, # Indicates if there was a suggested change to spreadsheet_id.
                  },
                },
                &quot;embeddedDrawingPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in embedded_drawing_properties have been
                    # changed in this suggestion.
                    # EmbeddedDrawingProperties
                    # have been changed in this suggestion. For any field set to true, there is a
                    # new suggested value.
                },
                &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
                &quot;imagePropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. # A mask that indicates which of the fields in image_properties have been changed in
                    # this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;cropPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. # A mask that indicates which of the fields in crop_properties have been changed in
                      # this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                    &quot;offsetTopSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_top.
                    &quot;offsetBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_bottom.
                    &quot;offsetLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_left.
                    &quot;offsetRightSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_right.
                  },
                  &quot;brightnessSuggested&quot;: True or False, # Indicates if there was a suggested change to brightness.
                  &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                  &quot;contrastSuggested&quot;: True or False, # Indicates if there was a suggested change to contrast.
                  &quot;contentUriSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # content_uri.
                  &quot;sourceUriSuggested&quot;: True or False, # Indicates if there was a suggested change to source_uri.
                  &quot;transparencySuggested&quot;: True or False, # Indicates if there was a suggested change to transparency.
                },
                &quot;embeddedObjectBorderSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this # A mask that indicates which of the fields in embedded_object_border have been
                    # changed in this suggestion.
                    # suggestion. For any field set to true, there is a new suggested value.
                  &quot;propertyStateSuggested&quot;: True or False, # Indicates if there was a suggested change to property_state.
                  &quot;colorSuggested&quot;: True or False, # Indicates if there was a suggested change to color.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                  &quot;dashStyleSuggested&quot;: True or False, # Indicates if there was a suggested change to dash_style.
                },
              },
            },
            &quot;positionedObjectProperties&quot;: { # Properties of a PositionedObject. # A PositionedObjectProperties that only includes the
                # changes made in this suggestion. This can be used along with the
                # positioned_object_properties_suggestion_state
                # to see which fields have changed and their new values.
              &quot;positioning&quot;: { # The positioning of a PositionedObject. The positioned object is positioned # The positioning of this positioned object relative to the newline of the
                  # Paragraph that references this positioned
                  # object.
                  # relative to the beginning of the Paragraph
                  # it is tethered to.
                &quot;leftOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the left edge of the positioned object relative to the
                    # beginning of the Paragraph it is tethered
                    # to. The exact positioning of the object can depend on other content in the
                    # document and the document&#x27;s styling.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;layout&quot;: &quot;A String&quot;, # The layout of this positioned object.
                &quot;topOffset&quot;: { # A magnitude in a single direction in the specified units. # The offset of the top edge of the positioned object relative to the
                    # beginning of the Paragraph it is tethered
                    # to. The exact positioning of the object can depend on other content in the
                    # document and the document&#x27;s styling.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
              &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this positioned object.
                &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                    # both combined to display alt text.
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
                  &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
                  &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                      #
                      # The crop rectangle is represented using fractional offsets from the original
                      # content&#x27;s four edges.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                      # - If all offsets and rotation angle are 0, the image is not cropped.
                    &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                        # from the top edge of the original content as a fraction of the original
                        # content&#x27;s height.
                    &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                        # from the left edge of the original content as a fraction of the original
                        # content&#x27;s width.
                    &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                        # radians. Rotation is applied after the offsets.
                    &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                        # is from the right edge of the original content as a fraction of the
                        # original content&#x27;s width.
                    &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                        # is from the bottom edge of the original content as a fraction of the
                        # original content&#x27;s height.
                  },
                  &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                      # empty.
                  &quot;transparency&quot;: 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.
                  &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                      # This URI is tagged with the account of the requester. Anyone with the URI
                      # effectively accesses the image as the original requester. Access to the
                      # image may be lost if the document&#x27;s sharing settings change.
                },
                &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
                  &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                    # combined to display alt text.
                &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
                },
                &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                    # a reference to the source Sheets chart when the embedded object is a linked
                    # chart.
                    #
                    # If unset, then the embedded object is not linked.
                  &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                    &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                    &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                        # embedded.
                  },
                },
                &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
          },
        },
      },
    },
    &quot;inlineObjects&quot;: { # Output only. The inline objects in the document, keyed by object ID.
      &quot;a_key&quot;: { # An object that appears inline with text. An InlineObject contains
          # an EmbeddedObject such as an image.
        &quot;inlineObjectProperties&quot;: { # Properties of an InlineObject. # The properties of this inline object.
          &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this inline object.
            &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                # both combined to display alt text.
            &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
              &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
              &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                  #
                  # The crop rectangle is represented using fractional offsets from the original
                  # content&#x27;s four edges.
                  #
                  # - If the offset is in the interval (0, 1), the corresponding edge of crop
                  # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                  # - If the offset is negative or greater than 1, the corresponding edge of crop
                  # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                  # - If all offsets and rotation angle are 0, the image is not cropped.
                &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                    # from the top edge of the original content as a fraction of the original
                    # content&#x27;s height.
                &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                    # from the left edge of the original content as a fraction of the original
                    # content&#x27;s width.
                &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                    # radians. Rotation is applied after the offsets.
                &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                    # is from the right edge of the original content as a fraction of the
                    # original content&#x27;s width.
                &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                    # is from the bottom edge of the original content as a fraction of the
                    # original content&#x27;s height.
              },
              &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                  # empty.
              &quot;transparency&quot;: 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.
              &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                  # [-1.0, 1.0], where 0 means no effect.
              &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                  # This URI is tagged with the account of the requester. Anyone with the URI
                  # effectively accesses the image as the original requester. Access to the
                  # image may be lost if the document&#x27;s sharing settings change.
            },
            &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
              &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                # combined to display alt text.
            &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
            },
            &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                # a reference to the source Sheets chart when the embedded object is a linked
                # chart.
                #
                # If unset, then the embedded object is not linked.
              &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                    # embedded.
              },
            },
            &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
        },
        &quot;suggestedInlineObjectPropertiesChanges&quot;: { # The suggested changes to the inline object properties, keyed by suggestion
            # ID.
          &quot;a_key&quot;: { # A suggested change to InlineObjectProperties.
            &quot;inlineObjectProperties&quot;: { # Properties of an InlineObject. # An InlineObjectProperties
                # that only includes the changes made in this suggestion. This can be used
                # along with the inline_object_properties_suggestion_state
                # to see which fields have changed and their new values.
              &quot;embeddedObject&quot;: { # An embedded object in the document. # The embedded object of this inline object.
                &quot;description&quot;: &quot;A String&quot;, # The description of the embedded object. The `title` and `description` are
                    # both combined to display alt text.
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;imageProperties&quot;: { # The properties of an image. # The properties of an image.
                  &quot;contrast&quot;: 3.14, # The contrast effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;angle&quot;: 3.14, # The clockwise rotation angle of the image, in radians.
                  &quot;cropProperties&quot;: { # The crop properties of an image. # The crop properties of the image.
                      #
                      # The crop rectangle is represented using fractional offsets from the original
                      # content&#x27;s four edges.
                      #
                      # - If the offset is in the interval (0, 1), the corresponding edge of crop
                      # rectangle is positioned inside of the image&#x27;s original bounding rectangle.
                      # - If the offset is negative or greater than 1, the corresponding edge of crop
                      # rectangle is positioned outside of the image&#x27;s original bounding rectangle.
                      # - If all offsets and rotation angle are 0, the image is not cropped.
                    &quot;offsetTop&quot;: 3.14, # The offset specifies how far inwards the top edge of the crop rectangle is
                        # from the top edge of the original content as a fraction of the original
                        # content&#x27;s height.
                    &quot;offsetLeft&quot;: 3.14, # The offset specifies how far inwards the left edge of the crop rectangle is
                        # from the left edge of the original content as a fraction of the original
                        # content&#x27;s width.
                    &quot;angle&quot;: 3.14, # The clockwise rotation angle of the crop rectangle around its center, in
                        # radians. Rotation is applied after the offsets.
                    &quot;offsetRight&quot;: 3.14, # The offset specifies how far inwards the right edge of the crop rectangle
                        # is from the right edge of the original content as a fraction of the
                        # original content&#x27;s width.
                    &quot;offsetBottom&quot;: 3.14, # The offset specifies how far inwards the bottom edge of the crop rectangle
                        # is from the bottom edge of the original content as a fraction of the
                        # original content&#x27;s height.
                  },
                  &quot;sourceUri&quot;: &quot;A String&quot;, # The source URI is the URI used to insert the image. The source URI can be
                      # empty.
                  &quot;transparency&quot;: 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.
                  &quot;brightness&quot;: 3.14, # The brightness effect of the image. The value should be in the interval
                      # [-1.0, 1.0], where 0 means no effect.
                  &quot;contentUri&quot;: &quot;A String&quot;, # A URI to the image with a default lifetime of 30 minutes.
                      # This URI is tagged with the account of the requester. Anyone with the URI
                      # effectively accesses the image as the original requester. Access to the
                      # image may be lost if the document&#x27;s sharing settings change.
                },
                &quot;size&quot;: { # A width and height. # The visible size of the image after cropping.
                  &quot;height&quot;: { # A magnitude in a single direction in the specified units. # The height of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the object.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;title&quot;: &quot;A String&quot;, # The title of the embedded object. The `title` and `description` are both
                    # combined to display alt text.
                &quot;embeddedDrawingProperties&quot;: { # The properties of an embedded drawing. # The properties of an embedded drawing.
                },
                &quot;linkedContentReference&quot;: { # A reference to the external linked source content. # A reference to the external linked source content. For example, it contains
                    # a reference to the source Sheets chart when the embedded object is a linked
                    # chart.
                    #
                    # If unset, then the embedded object is not linked.
                  &quot;sheetsChartReference&quot;: { # A reference to a linked chart embedded from Google Sheets. # A reference to the linked chart.
                    &quot;spreadsheetId&quot;: &quot;A String&quot;, # The ID of the Google Sheets spreadsheet that contains the source chart.
                    &quot;chartId&quot;: 42, # The ID of the specific chart in the Google Sheets spreadsheet that is
                        # embedded.
                  },
                },
                &quot;embeddedObjectBorder&quot;: { # A border around an EmbeddedObject. # The border of the embedded object.
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;propertyState&quot;: &quot;A String&quot;, # The property state of the border property.
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom margin of the embedded object.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;inlineObjectPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                # InlineObjectProperties have
                # been changed in this suggestion.
                # InlineObjectProperties have
                # been changed in this suggestion. For any field set to true, there is a new
                # suggested value.
              &quot;embeddedObjectSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObject have been changed in this suggestion. # A mask that indicates which of the fields in embedded_object have been
                  # changed in this suggestion.
                  # For any field set to true, there is a new suggested value.
                &quot;marginTopSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_top.
                &quot;marginLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_left.
                &quot;descriptionSuggested&quot;: True or False, # Indicates if there was a suggested change to description.
                &quot;marginBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_bottom.
                &quot;sizeSuggestionState&quot;: { # A mask that indicates which of the fields on the base Size have been changed in this suggestion. # A mask that indicates which of the fields in size have been changed in this
                    # suggestion.
                    # For any field set to true, the Size has
                    # a new suggested value.
                  &quot;heightSuggested&quot;: True or False, # Indicates if there was a suggested change to height.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                },
                &quot;titleSuggested&quot;: True or False, # Indicates if there was a suggested change to title.
                &quot;linkedContentReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in linked_content_reference have been
                    # changed in this suggestion.
                    # LinkedContentReference have
                    # been changed in this suggestion. For any field set to true, there is a new
                    # suggested value.
                  &quot;sheetsChartReferenceSuggestionState&quot;: { # A mask that indicates which of the fields on the base SheetsChartReference have been changed in this # A mask that indicates which of the fields in sheets_chart_reference have
                      # been changed in this suggestion.
                      # suggestion. For any field set to true, there is a new suggested value.
                    &quot;chartIdSuggested&quot;: True or False, # Indicates if there was a suggested change to chart_id.
                    &quot;spreadsheetIdSuggested&quot;: True or False, # Indicates if there was a suggested change to spreadsheet_id.
                  },
                },
                &quot;embeddedDrawingPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields in embedded_drawing_properties have been
                    # changed in this suggestion.
                    # EmbeddedDrawingProperties
                    # have been changed in this suggestion. For any field set to true, there is a
                    # new suggested value.
                },
                &quot;marginRightSuggested&quot;: True or False, # Indicates if there was a suggested change to margin_right.
                &quot;imagePropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ImageProperties have been changed in this suggestion. # A mask that indicates which of the fields in image_properties have been changed in
                    # this suggestion.
                    # For any field set to true, there is a new suggested value.
                  &quot;cropPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base CropProperties have been changed in this suggestion. # A mask that indicates which of the fields in crop_properties have been changed in
                      # this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                    &quot;offsetTopSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_top.
                    &quot;offsetBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_bottom.
                    &quot;offsetLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_left.
                    &quot;offsetRightSuggested&quot;: True or False, # Indicates if there was a suggested change to offset_right.
                  },
                  &quot;brightnessSuggested&quot;: True or False, # Indicates if there was a suggested change to brightness.
                  &quot;angleSuggested&quot;: True or False, # Indicates if there was a suggested change to angle.
                  &quot;contrastSuggested&quot;: True or False, # Indicates if there was a suggested change to contrast.
                  &quot;contentUriSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # content_uri.
                  &quot;sourceUriSuggested&quot;: True or False, # Indicates if there was a suggested change to source_uri.
                  &quot;transparencySuggested&quot;: True or False, # Indicates if there was a suggested change to transparency.
                },
                &quot;embeddedObjectBorderSuggestionState&quot;: { # A mask that indicates which of the fields on the base EmbeddedObjectBorder have been changed in this # A mask that indicates which of the fields in embedded_object_border have been
                    # changed in this suggestion.
                    # suggestion. For any field set to true, there is a new suggested value.
                  &quot;propertyStateSuggested&quot;: True or False, # Indicates if there was a suggested change to property_state.
                  &quot;colorSuggested&quot;: True or False, # Indicates if there was a suggested change to color.
                  &quot;widthSuggested&quot;: True or False, # Indicates if there was a suggested change to width.
                  &quot;dashStyleSuggested&quot;: True or False, # Indicates if there was a suggested change to dash_style.
                },
              },
            },
          },
        },
        &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
            # of this content.
          &quot;A String&quot;,
        ],
        &quot;objectId&quot;: &quot;A String&quot;, # The ID of this inline object.
        &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
            # insertion.
      },
    },
    &quot;revisionId&quot;: &quot;A String&quot;, # Output only. The revision ID of the document. Can be used in update
        # requests to specify which revision of a document to apply updates to and
        # how the request should behave if the document has been edited since that
        # revision. Only populated if the user has edit access to the document.
        #
        # 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 document has not changed.
        # Conversely, a changed ID (for the same document and user) usually means the
        # document has been updated; however, a changed ID can also be due to
        # internal factors such as ID format changes.
    &quot;lists&quot;: { # Output only. The lists in the document, keyed by list ID.
      &quot;a_key&quot;: { # A List represents the list attributes for a group of paragraphs that all
          # belong to the same list. A paragraph that is part of a list has a reference
          # to the list&#x27;s ID in its bullet.
        &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
            # of this list.
          &quot;A String&quot;,
        ],
        &quot;listProperties&quot;: { # The properties of a list which describe the look # The properties of the list.
            # and feel of bullets belonging to paragraphs associated with a list.
          &quot;nestingLevels&quot;: [ # Describes the properties of the bullets at the associated level.
              #
              # A list has at most nine levels of nesting with nesting level 0
              # corresponding to the top-most level and nesting level 8 corresponding to
              # the most nested level. The nesting levels are returned in ascending order
              # with the least nested returned first.
            { # Contains properties describing the look and feel of a list bullet at a given
                # level of nesting.
              &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of paragraphs at this level of
                  # nesting.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;glyphSymbol&quot;: &quot;A String&quot;, # A custom glyph symbol used by bullets when paragraphs at this level of
                  # nesting are unordered.
                  #
                  # The glyph symbol replaces placeholders within the glyph_format. For example, if the
                  # glyph_symbol is the solid circle corresponding to Unicode U+25cf code
                  # point and the glyph_format is `%0`, the rendered
                  # glyph would be the solid circle.
              &quot;glyphFormat&quot;: &quot;A String&quot;, # The format string used by bullets at this level of nesting.
                  #
                  # The glyph format contains one or more placeholders, and these placeholder
                  # are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow
                  # the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes
                  # and suffixes. Thus, the glyph format follows the pattern
                  # `&lt;prefix&gt;%[nesting_level]&lt;suffix&gt;`. Note that the prefix and suffix are
                  # optional and can be arbitrary strings.
                  #
                  # For example, the glyph format `%0.` indicates that the rendered glyph will
                  # replace the placeholder with the corresponding glyph for nesting level 0
                  # followed by a period as the suffix. So a list with a glyph type of
                  # UPPER_ALPHA and
                  # glyph format `%0.` at nesting level 0 will result in a list with rendered
                  # glyphs
                  # &lt;p&gt;`A.`
                  # &lt;p&gt;`B.`
                  # &lt;p&gt;`C.`
                  #
                  # The glyph format can contain placeholders for the current nesting level as
                  # well as placeholders for parent nesting levels. For example, a
                  # list can have a glyph format of `%0.` at nesting level 0 and a
                  # glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels
                  # have DECIMAL glyph
                  # types, this would result in a list with rendered glyphs
                  # &lt;p&gt;`1.`
                  # &lt;p&gt;`2.`
                  # &lt;p&gt;`  2.1.`
                  # &lt;p&gt;`  2.2.`
                  # &lt;p&gt;`3.`
                  #
                  # For nesting levels that are ordered, the string that replaces a placeholder
                  # in the glyph format for a particular paragraph depends on the paragraph&#x27;s
                  # order within the list.
              &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of bullets at this level of nesting.
                  #
                  # Inherited text styles are represented as unset fields in this message. A
                  # text style&#x27;s parent depends on where the text style is defined:
                  #
                  #   * The TextStyle of text in a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The TextStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The TextStyle of the normal text named style inherits
                  #     from the default text style in the Docs editor.
                  #   * The TextStyle on a Paragraph element
                  #     that is contained in a table may inherit its text style from the table
                  #     style.
                  #
                  # If the text style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                    #
                    # 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.
                  &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                      #
                      # The font family can be any font from the Font menu in Docs or from
                      # [Google Fonts] (https://fonts.google.com/). If the font name is
                      # unrecognized, the text is rendered in `Arial`.
                  &quot;weight&quot;: 42, # The weight of the font. 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.
                      #
                      # The default value is `400` (&quot;normal&quot;).
                      #
                      # The font weight makes up just one component of the rendered font weight.
                      # The rendered weight is determined by a combination of the `weight` and the
                      # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                      #
                      # * If the text is bold and the weight is less than `400`, the rendered
                      #   weight is 400.
                      # * If the text is bold and the weight is greater than or equal to `400` but
                      #   is less than `700`, the rendered weight is `700`.
                      # * If the weight is greater than or equal to `700`, the rendered weight is
                      #   equal to the weight.
                      # * If the text is not bold, the rendered weight is equal to the weight.
                },
                &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                    # or transparent, depending on the `color` field.
                  &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                      # a transparent color.
                    &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                      &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                      &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                      &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                    },
                  },
                },
                &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                    #   default link color 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 `&quot;ABC\n123&quot;`,
                    #   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.
                  &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                  &quot;url&quot;: &quot;A String&quot;, # An external URL.
                  &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                },
                &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
              },
              &quot;startNumber&quot;: 42, # The number of the first list item at this nesting level.
                  #
                  # A value of 0 is treated as a value of 1 for lettered lists and roman
                  # numeraled lists, i.e. for values of both 0 and 1, lettered and roman
                  # numeraled lists will begin at `a` and `i` respectively.
                  #
                  # This value is ignored for nesting levels with unordered glyphs.
              &quot;bulletAlignment&quot;: &quot;A String&quot;, # The alignment of the bullet within the space allotted for rendering the
                  # bullet.
              &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for paragraphs at this level of nesting. Applied
                  # to the side that corresponds to the start of the text, based on the
                  # paragraph&#x27;s content direction.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;glyphType&quot;: &quot;A String&quot;, # The type of glyph used by bullets when paragraphs at this level of
                  # nesting are ordered.
                  #
                  # The glyph type determines the type of glyph used to replace placeholders
                  # within the glyph_format
                  # when paragraphs at this level of nesting are ordered. For example, if the
                  # nesting level is 0, the glyph_format is `%0.` and the glyph
                  # type is DECIMAL,
                  # then the rendered glyph would replace the placeholder `%0` in the glyph
                  # format with a number corresponding to list item&#x27;s order within the list.
            },
          ],
        },
        &quot;suggestedListPropertiesChanges&quot;: { # The suggested changes to the list properties, keyed by suggestion
            # ID.
          &quot;a_key&quot;: { # A suggested change to ListProperties.
            &quot;listProperties&quot;: { # The properties of a list which describe the look # A ListProperties that only includes
                # the changes made in this suggestion. This can be used along with the
                # list_properties_suggestion_state
                # to see which fields have changed and their new values.
                # and feel of bullets belonging to paragraphs associated with a list.
              &quot;nestingLevels&quot;: [ # Describes the properties of the bullets at the associated level.
                  #
                  # A list has at most nine levels of nesting with nesting level 0
                  # corresponding to the top-most level and nesting level 8 corresponding to
                  # the most nested level. The nesting levels are returned in ascending order
                  # with the least nested returned first.
                { # Contains properties describing the look and feel of a list bullet at a given
                    # level of nesting.
                  &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of paragraphs at this level of
                      # nesting.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;glyphSymbol&quot;: &quot;A String&quot;, # A custom glyph symbol used by bullets when paragraphs at this level of
                      # nesting are unordered.
                      #
                      # The glyph symbol replaces placeholders within the glyph_format. For example, if the
                      # glyph_symbol is the solid circle corresponding to Unicode U+25cf code
                      # point and the glyph_format is `%0`, the rendered
                      # glyph would be the solid circle.
                  &quot;glyphFormat&quot;: &quot;A String&quot;, # The format string used by bullets at this level of nesting.
                      #
                      # The glyph format contains one or more placeholders, and these placeholder
                      # are replaced with the appropriate values depending on the glyph_type or glyph_symbol. The placeholders follow
                      # the pattern `%[nesting_level]`. Furthermore, placeholders can have prefixes
                      # and suffixes. Thus, the glyph format follows the pattern
                      # `&lt;prefix&gt;%[nesting_level]&lt;suffix&gt;`. Note that the prefix and suffix are
                      # optional and can be arbitrary strings.
                      #
                      # For example, the glyph format `%0.` indicates that the rendered glyph will
                      # replace the placeholder with the corresponding glyph for nesting level 0
                      # followed by a period as the suffix. So a list with a glyph type of
                      # UPPER_ALPHA and
                      # glyph format `%0.` at nesting level 0 will result in a list with rendered
                      # glyphs
                      # &lt;p&gt;`A.`
                      # &lt;p&gt;`B.`
                      # &lt;p&gt;`C.`
                      #
                      # The glyph format can contain placeholders for the current nesting level as
                      # well as placeholders for parent nesting levels. For example, a
                      # list can have a glyph format of `%0.` at nesting level 0 and a
                      # glyph format of `%0.%1.` at nesting level 1. Assuming both nesting levels
                      # have DECIMAL glyph
                      # types, this would result in a list with rendered glyphs
                      # &lt;p&gt;`1.`
                      # &lt;p&gt;`2.`
                      # &lt;p&gt;`  2.1.`
                      # &lt;p&gt;`  2.2.`
                      # &lt;p&gt;`3.`
                      #
                      # For nesting levels that are ordered, the string that replaces a placeholder
                      # in the glyph format for a particular paragraph depends on the paragraph&#x27;s
                      # order within the list.
                  &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of bullets at this level of nesting.
                      #
                      # Inherited text styles are represented as unset fields in this message. A
                      # text style&#x27;s parent depends on where the text style is defined:
                      #
                      #   * The TextStyle of text in a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The TextStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The TextStyle of the normal text named style inherits
                      #     from the default text style in the Docs editor.
                      #   * The TextStyle on a Paragraph element
                      #     that is contained in a table may inherit its text style from the table
                      #     style.
                      #
                      # If the text style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                    &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                    &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                        #
                        # 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.
                      &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                          #
                          # The font family can be any font from the Font menu in Docs or from
                          # [Google Fonts] (https://fonts.google.com/). If the font name is
                          # unrecognized, the text is rendered in `Arial`.
                      &quot;weight&quot;: 42, # The weight of the font. 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.
                          #
                          # The default value is `400` (&quot;normal&quot;).
                          #
                          # The font weight makes up just one component of the rendered font weight.
                          # The rendered weight is determined by a combination of the `weight` and the
                          # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                          #
                          # * If the text is bold and the weight is less than `400`, the rendered
                          #   weight is 400.
                          # * If the text is bold and the weight is greater than or equal to `400` but
                          #   is less than `700`, the rendered weight is `700`.
                          # * If the weight is greater than or equal to `700`, the rendered weight is
                          #   equal to the weight.
                          # * If the text is not bold, the rendered weight is equal to the weight.
                    },
                    &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                    &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                        # or transparent, depending on the `color` field.
                      &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                          # a transparent color.
                        &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                          &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                          &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                          &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                        },
                      },
                    },
                    &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                    &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                        #   default link color 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 `&quot;ABC\n123&quot;`,
                        #   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.
                      &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                      &quot;url&quot;: &quot;A String&quot;, # An external URL.
                      &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                    },
                    &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                    &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                  },
                  &quot;startNumber&quot;: 42, # The number of the first list item at this nesting level.
                      #
                      # A value of 0 is treated as a value of 1 for lettered lists and roman
                      # numeraled lists, i.e. for values of both 0 and 1, lettered and roman
                      # numeraled lists will begin at `a` and `i` respectively.
                      #
                      # This value is ignored for nesting levels with unordered glyphs.
                  &quot;bulletAlignment&quot;: &quot;A String&quot;, # The alignment of the bullet within the space allotted for rendering the
                      # bullet.
                  &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for paragraphs at this level of nesting. Applied
                      # to the side that corresponds to the start of the text, based on the
                      # paragraph&#x27;s content direction.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;glyphType&quot;: &quot;A String&quot;, # The type of glyph used by bullets when paragraphs at this level of
                      # nesting are ordered.
                      #
                      # The glyph type determines the type of glyph used to replace placeholders
                      # within the glyph_format
                      # when paragraphs at this level of nesting are ordered. For example, if the
                      # nesting level is 0, the glyph_format is `%0.` and the glyph
                      # type is DECIMAL,
                      # then the rendered glyph would replace the placeholder `%0` in the glyph
                      # format with a number corresponding to list item&#x27;s order within the list.
                },
              ],
            },
            &quot;listPropertiesSuggestionState&quot;: { # A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion. # A mask that indicates which of the fields on the base ListProperties have been changed in this suggestion.
                # For any field set to true, there is a new suggested value.
              &quot;nestingLevelsSuggestionStates&quot;: [ # A mask that indicates which of the fields on the corresponding
                  # NestingLevel in nesting_levels have been changed in
                  # this suggestion.
                  #
                  # The nesting level suggestion states are returned in ascending order of the
                  # nesting level with the least nested returned first.
                { # A mask that indicates which of the fields on the base NestingLevel have been changed in this suggestion. For
                    # any field set to true, there is a new suggested value.
                  &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # indent_first_line.
                  &quot;bulletAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # bullet_alignment.
                  &quot;glyphSymbolSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # glyph_symbol.
                  &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                      # suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                    &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                    &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                    &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                    &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                    &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                    &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                    &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                    &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                    &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                    &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                  },
                  &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # indent_start.
                  &quot;glyphFormatSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # glyph_format.
                  &quot;startNumberSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # start_number.
                  &quot;glyphTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to
                      # glyph_type.
                },
              ],
            },
          },
        },
        &quot;suggestedInsertionId&quot;: &quot;A String&quot;, # The suggested insertion ID. If empty, then this is not a suggested
            # insertion.
      },
    },
    &quot;headers&quot;: { # Output only. The headers in the document, keyed by header ID.
      &quot;a_key&quot;: { # A document header.
        &quot;headerId&quot;: &quot;A String&quot;, # The ID of the header.
        &quot;content&quot;: [ # The contents of the header.
            #
            # The indexes for a header&#x27;s content begin at zero.
          { # A StructuralElement describes content that provides structure to the
              # document.
            &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
                # table.
              &quot;rows&quot;: 42, # Number of rows in the table.
              &quot;columns&quot;: 42, # Number of columns in the table.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells.
              &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
                &quot;tableColumnProperties&quot;: [ # The properties of each column.
                    #
                    # Note that in Docs, tables contain rows and rows contain cells, similar to
                    # HTML. So the properties for a row can be found on the row&#x27;s
                    # table_row_style.
                  { # The properties of a column in a table.
                    &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                        # FIXED_WIDTH.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;tableRows&quot;: [ # The contents and style of each row.
                { # The contents and style of a row in a Table.
                  &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a
                        # TableRowStyle.
                      &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_row_style_suggestion_state
                          # to see which fields have changed and their new values.
                        &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                            # at a height equal to or greater than this value in order to show all the
                            # content in the row&#x27;s cells.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                      &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                      },
                    },
                  },
                  &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                      #
                      # It is possible for a table to be non-rectangular, so some rows may have a
                      # different number of cells than other rows in the same table.
                    { # The contents and style of a cell in a Table.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                      &quot;content&quot;: [ # The content of the cell.
                        # Object with schema name: StructuralElement
                      ],
                      &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                      &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                        &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                          &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                              # the changes made in this suggestion. This can be used along with the
                              # table_cell_style_suggestion_state
                              # to see which fields have changed and their new values.
                              #
                              # Inherited table cell styles are represented as unset fields in this message.
                              # A table cell style can inherit from the table&#x27;s style.
                            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;columnSpan&quot;: 42, # The column span of the cell.
                                #
                                # This property is read-only.
                            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                                # matches the alignment for newly created table cells in the Docs editor.
                            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            &quot;rowSpan&quot;: 42, # The row span of the cell.
                                #
                                # This property is read-only.
                          },
                          &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                              # For any field set to true, there is a new suggested value.
                            &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                            &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                            &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                            &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                            &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                            &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                            &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                            &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                            &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                            &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                            &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                            &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                          },
                        },
                      },
                      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                          # of this content.
                        &quot;A String&quot;,
                      ],
                      &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                          # may have multiple insertion IDs if it is a nested suggested change. If
                          # empty, then this is not a suggested insertion.
                        &quot;A String&quot;,
                      ],
                    },
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                  # multiple insertion IDs if it is a nested suggested change. If empty, then
                  # this is not a suggested insertion.
                &quot;A String&quot;,
              ],
            },
            &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
                # a table of contents.
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                  # is a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;content&quot;: [ # The content of the table of contents.
                # Object with schema name: StructuralElement
              ],
            },
            &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
                # units.
            &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
                # section break. A section is a range of content which has the same
                # SectionStyle. A section break represents
                # the start of a new section, and the section style applies to the section
                # after the section break.
                #
                # The document body always begins with a section break.
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                  # a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
                &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a footer margin is being respected for this
                    # section
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                    # LEFT_TO_RIGHT.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a header margin is being respected for this
                    # section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                    # Updating right margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                    #
                    # If empty, the section contains one column with the default properties in
                    # the Docs editor.
                    # A section can be updated to have no more than three columns.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property will result in a 400 bad request error.
                  { # Properties that apply to a section&#x27;s column.
                    &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                    # Updating left margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_footer_id.
                    #
                    # This property is read-only.
                &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the headers on even pages in the section. If it
                    # is false, the headers on even pages uses the default_header_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_header_id.
                    #
                    # This property is read-only.
                &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                    # section. If unset, page numbering continues from the previous section.
                    # If the value is unset in the first
                    # SectionBreak, refer to DocumentStyle&#x27;s
                    # page_number_start.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_header_id.
                    #
                    # This property is read-only.
                &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the footers on even pages in the section. If it
                    # is false, the footers on even pages uses the default_footer_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_footer_id.
                    #
                    # This property is read-only.
                &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                    #
                    # This style can be set even when there is one column in the section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                    # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                    # use_first_page_header_footer for the
                    # first section. If the value is unset for subsequent sectors, it should be
                    # interpreted as false.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the header on the first page of the section. If
                    # it is false, the header on the first page of the section uses the
                    # default_header_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_header_id.
                    #
                    # This property is read-only.
                &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the footer on the first page of the section. If
                    # it is false, the footer on the first page of the section uses the
                    # default_footer_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_footer_id.
                    #
                    # This property is read-only.
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
            },
            &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
                # paragraph. A paragraph is a range of content that is terminated with a
                # newline character.
              &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                  # paragraph, keyed by suggestion ID.
                &quot;a_key&quot;: { # A collection of object IDs.
                  &quot;objectIds&quot;: [ # The object IDs.
                    &quot;A String&quot;,
                  ],
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                  # belong to a list.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
              &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
                &quot;A String&quot;,
              ],
              &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
                &quot;a_key&quot;: { # A suggested change to a Bullet.
                  &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                      # Bullet have been changed in this suggestion.
                      # Bullet have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # list_id.
                    &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # nesting_level.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                        # suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                  },
                  &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                      # in this suggestion. This can be used along with the
                      # bullet_suggestion_state to see which
                      # fields have changed and their new values.
                    &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                  },
                },
              },
              &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
                { # A ParagraphElement describes content within a
                    # Paragraph.
                  &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                      # page break. A page break makes the subsequent text start at the top of the
                      # next page.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a page break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                      # equation.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                      # footnote reference. A footnote reference is the inline content rendered with
                      # a number and is used to identify the footnote.
                    &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                        # contains the content of this footnote reference.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                        # it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                      # an InlineObject.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                        # element contains.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                        # if it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of an inline object element can affect content layout as well as the
                        # styling of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                  },
                  &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                      # run of text that all has the same styling.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                        # have multiple insertion IDs if it is a nested suggested change. If empty,
                        # then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                        #
                        # Any non-text elements in the run are replaced with the Unicode character
                        # U+E907.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                      # horizontal line.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a horizontal rule can affect content layout as well as the styling
                        # of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                        # is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                      # spot in the text that is dynamically replaced with content that can change
                      # over time, like a page number.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                      # column break. A column break makes the subsequent text start at the top of
                      # the next column.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                        # a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a column break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                  &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                      # code units.
                },
              ],
              &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                  # suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # ParagraphStyle.
                  &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                    &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                    &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                    &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                    &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                    &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                    &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                        # this suggestion.
                        # suggested change. For any field set to true, there is a new suggested value.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                    },
                    &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                    &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                    &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                    &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                    &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                    &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                    &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                    &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                    &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                    &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                    &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                    &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                    &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                  },
                  &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # paragraph_suggestion_state
                      # to see which fields have changed and their new values.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                      # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                      #
                      #   * The ParagraphStyle on a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The ParagraphStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The ParagraphStyle of the normal text named style inherits
                      #     from the default paragraph style in the Docs editor.
                      #   * The ParagraphStyle on a Paragraph
                      #     element that is contained in a table may inherit its paragraph style from
                      #     the table style.
                      #
                      # If the paragraph style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                        #
                        # Since updating the named style type affects other properties within
                        # ParagraphStyle, the named style type is applied before the other properties
                        # are updated.
                    &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                        # inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                        # page or column as the next paragraph if possible. If unset, the value is
                        # inherited from the parent.
                    &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                    &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                        # parent.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                        # is inherited from the parent.
                    &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                    &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                        # inherited.
                        #
                        # This property is read-only.
                      { # A tab stop within a paragraph.
                        &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                        &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                    ],
                    &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # The top border is rendered when the paragraph above has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                        # inherited from the parent.
                        #
                        # The bottom border is rendered when the paragraph below has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                        # If unset, the value is inherited from the parent.
                        #
                        # The between border is rendered when the adjacent paragraph has the same
                        # border and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;lineSpacing&quot;: 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.
                    &quot;spaceAbove&quot;: { # 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.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                        # column if possible. If unset, the value is inherited from the parent.
                    &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                        # heading.
                        #
                        # This property is read-only.
                    &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # paragraph direction is not inherited.
                    &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                },
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
                # code units.
          },
        ],
      },
    },
    &quot;footnotes&quot;: { # Output only. The footnotes in the document, keyed by footnote ID.
      &quot;a_key&quot;: { # A document footnote.
        &quot;content&quot;: [ # The contents of the footnote.
            #
            # The indexes for a footnote&#x27;s content begin at zero.
          { # A StructuralElement describes content that provides structure to the
              # document.
            &quot;table&quot;: { # A StructuralElement representing a # A table type of structural element.
                # table.
              &quot;rows&quot;: 42, # Number of rows in the table.
              &quot;columns&quot;: 42, # Number of columns in the table.
                  #
                  # It is possible for a table to be non-rectangular, so some rows may have a
                  # different number of cells.
              &quot;tableStyle&quot;: { # Styles that apply to a table. # The style of the table.
                &quot;tableColumnProperties&quot;: [ # The properties of each column.
                    #
                    # Note that in Docs, tables contain rows and rows contain cells, similar to
                    # HTML. So the properties for a row can be found on the row&#x27;s
                    # table_row_style.
                  { # The properties of a column in a table.
                    &quot;widthType&quot;: &quot;A String&quot;, # The width type of the column.
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the column. Set when the column&#x27;s `width_type` is
                        # FIXED_WIDTH.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;tableRows&quot;: [ # The contents and style of each row.
                { # The contents and style of a row in a Table.
                  &quot;startIndex&quot;: 42, # The zero-based start index of this row, in UTF-16 code units.
                  &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # The style of the table row.
                    &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                        # at a height equal to or greater than this value in order to show all the
                        # content in the row&#x27;s cells.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                  &quot;suggestedTableRowStyleChanges&quot;: { # The suggested style changes to this row, keyed by suggestion ID.
                    &quot;a_key&quot;: { # A suggested change to a
                        # TableRowStyle.
                      &quot;tableRowStyle&quot;: { # Styles that apply to a table row. # A TableRowStyle that only includes
                          # the changes made in this suggestion. This can be used along with the
                          # table_row_style_suggestion_state
                          # to see which fields have changed and their new values.
                        &quot;minRowHeight&quot;: { # A magnitude in a single direction in the specified units. # The minimum height of the row. The row will be rendered in the Docs editor
                            # at a height equal to or greater than this value in order to show all the
                            # content in the row&#x27;s cells.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                      &quot;tableRowStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableRowStyle have been changed in this suggestion.
                          # For any field set to true, there is a new suggested value.
                        &quot;minRowHeightSuggested&quot;: True or False, # Indicates if there was a suggested change to min_row_height.
                      },
                    },
                  },
                  &quot;tableCells&quot;: [ # The contents and style of each cell in this row.
                      #
                      # It is possible for a table to be non-rectangular, so some rows may have a
                      # different number of cells than other rows in the same table.
                    { # The contents and style of a cell in a Table.
                      &quot;tableCellStyle&quot;: { # The style of a TableCell. # The style of the cell.
                          #
                          # Inherited table cell styles are represented as unset fields in this message.
                          # A table cell style can inherit from the table&#x27;s style.
                        &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                            #
                            # Table cell borders cannot be transparent. To hide a table cell border, make
                            # its width 0.
                          &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                          &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                              #
                              # This color cannot be transparent.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                        },
                        &quot;columnSpan&quot;: 42, # The column span of the cell.
                            #
                            # This property is read-only.
                        &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                            # matches the alignment for newly created table cells in the Docs editor.
                        &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                        &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                          &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                              # a transparent color.
                            &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                              &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                              &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                              &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                            },
                          },
                        },
                        &quot;rowSpan&quot;: 42, # The row span of the cell.
                            #
                            # This property is read-only.
                      },
                      &quot;startIndex&quot;: 42, # The zero-based start index of this cell, in UTF-16 code units.
                      &quot;content&quot;: [ # The content of the cell.
                        # Object with schema name: StructuralElement
                      ],
                      &quot;endIndex&quot;: 42, # The zero-based end index of this cell, exclusive, in UTF-16 code units.
                      &quot;suggestedTableCellStyleChanges&quot;: { # The suggested changes to the table cell style, keyed by suggestion ID.
                        &quot;a_key&quot;: { # A suggested change to a TableCellStyle.
                          &quot;tableCellStyle&quot;: { # The style of a TableCell. # A TableCellStyle that only includes
                              # the changes made in this suggestion. This can be used along with the
                              # table_cell_style_suggestion_state
                              # to see which fields have changed and their new values.
                              #
                              # Inherited table cell styles are represented as unset fields in this message.
                              # A table cell style can inherit from the table&#x27;s style.
                            &quot;borderBottom&quot;: { # A border around a table cell. # The bottom border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingLeft&quot;: { # A magnitude in a single direction in the specified units. # The left padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderRight&quot;: { # A border around a table cell. # The right border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;paddingTop&quot;: { # A magnitude in a single direction in the specified units. # The top padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;borderLeft&quot;: { # A border around a table cell. # The left border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;borderTop&quot;: { # A border around a table cell. # The top border of the cell.
                                #
                                # Table cell borders cannot be transparent. To hide a table cell border, make
                                # its width 0.
                              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                                &quot;magnitude&quot;: 3.14, # The magnitude.
                              },
                              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                                  #
                                  # This color cannot be transparent.
                                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                    # a transparent color.
                                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                  },
                                },
                              },
                            },
                            &quot;columnSpan&quot;: 42, # The column span of the cell.
                                #
                                # This property is read-only.
                            &quot;paddingRight&quot;: { # A magnitude in a single direction in the specified units. # The right padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;contentAlignment&quot;: &quot;A String&quot;, # The alignment of the content in the table cell. The default alignment
                                # matches the alignment for newly created table cells in the Docs editor.
                            &quot;paddingBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom padding of the cell.
                              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                              &quot;magnitude&quot;: 3.14, # The magnitude.
                            },
                            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the cell.
                              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                  # a transparent color.
                                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                                },
                              },
                            },
                            &quot;rowSpan&quot;: 42, # The row span of the cell.
                                #
                                # This property is read-only.
                          },
                          &quot;tableCellStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TableCellStyle have been changed in this suggestion.
                              # For any field set to true, there is a new suggested value.
                            &quot;paddingBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_bottom.
                            &quot;contentAlignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to content_alignment.
                            &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                            &quot;paddingTopSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_top.
                            &quot;paddingLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_left.
                            &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                            &quot;columnSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to column_span.
                            &quot;paddingRightSuggested&quot;: True or False, # Indicates if there was a suggested change to padding_right.
                            &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                            &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                            &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                            &quot;rowSpanSuggested&quot;: True or False, # Indicates if there was a suggested change to row_span.
                          },
                        },
                      },
                      &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                          # of this content.
                        &quot;A String&quot;,
                      ],
                      &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableCell
                          # may have multiple insertion IDs if it is a nested suggested change. If
                          # empty, then this is not a suggested insertion.
                        &quot;A String&quot;,
                      ],
                    },
                  ],
                  &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableRow
                      # may have multiple insertion IDs if it is a nested suggested change. If
                      # empty, then this is not a suggested insertion.
                    &quot;A String&quot;,
                  ],
                  &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                      # of this content.
                    &quot;A String&quot;,
                  ],
                  &quot;endIndex&quot;: 42, # The zero-based end index of this row, exclusive, in UTF-16 code units.
                },
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Table may have
                  # multiple insertion IDs if it is a nested suggested change. If empty, then
                  # this is not a suggested insertion.
                &quot;A String&quot;,
              ],
            },
            &quot;tableOfContents&quot;: { # A StructuralElement representing # A table of contents type of structural element.
                # a table of contents.
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TableOfContents may have multiple insertion IDs if it
                  # is a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;content&quot;: [ # The content of the table of contents.
                # Object with schema name: StructuralElement
              ],
            },
            &quot;startIndex&quot;: 42, # The zero-based start index of this structural element, in UTF-16 code
                # units.
            &quot;sectionBreak&quot;: { # A StructuralElement representing a # A section break type of structural element.
                # section break. A section is a range of content which has the same
                # SectionStyle. A section break represents
                # the start of a new section, and the section style applies to the section
                # after the section break.
                #
                # The document body always begins with a section break.
              &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A SectionBreak may have multiple insertion IDs if it is
                  # a nested suggested change. If empty, then this is not a suggested
                  # insertion.
                &quot;A String&quot;,
              ],
              &quot;sectionStyle&quot;: { # The styling that applies to a section. # The style of the section after this section break.
                &quot;marginFooter&quot;: { # A magnitude in a single direction in the specified units. # The footer margin of the section. If unset, uses margin_footer from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a footer margin is being respected for this
                    # section
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;contentDirection&quot;: &quot;A String&quot;, # The content direction of this section. If unset, the value defaults to
                    # LEFT_TO_RIGHT.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;marginHeader&quot;: { # A magnitude in a single direction in the specified units. # The header margin of the section. If unset, uses margin_header from DocumentStyle. If
                    # updated, use_custom_header_footer_margins is set
                    # to true on DocumentStyle. The value of use_custom_header_footer_margins on
                    # DocumentStyle indicates if a header margin is being respected for this
                    # section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginRight&quot;: { # A magnitude in a single direction in the specified units. # The right page margin of the section. If unset, uses margin_right from DocumentStyle.
                    # Updating right margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;marginTop&quot;: { # A magnitude in a single direction in the specified units. # The top page margin of the section. If unset, uses margin_top from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;columnProperties&quot;: [ # The section&#x27;s columns properties.
                    #
                    # If empty, the section contains one column with the default properties in
                    # the Docs editor.
                    # A section can be updated to have no more than three columns.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property will result in a 400 bad request error.
                  { # Properties that apply to a section&#x27;s column.
                    &quot;paddingEnd&quot;: { # A magnitude in a single direction in the specified units. # The padding at the end of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;width&quot;: { # A magnitude in a single direction in the specified units. # Output only. The width of the column.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;marginLeft&quot;: { # A magnitude in a single direction in the specified units. # The left page margin of the section. If unset, uses margin_left from DocumentStyle.
                    # Updating left margin causes columns in this section to resize. Since
                    # the margin affects column width, it is applied before column properties.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;defaultFooterId&quot;: &quot;A String&quot;, # The ID of the default footer. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_footer_id.
                    #
                    # This property is read-only.
                &quot;evenPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the headers on even pages in the section. If it
                    # is false, the headers on even pages uses the default_header_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_header_id.
                    #
                    # This property is read-only.
                &quot;pageNumberStart&quot;: 42, # The page number from which to start counting the number of pages for this
                    # section. If unset, page numbering continues from the previous section.
                    # If the value is unset in the first
                    # SectionBreak, refer to DocumentStyle&#x27;s
                    # page_number_start.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;defaultHeaderId&quot;: &quot;A String&quot;, # The ID of the default header. If unset, the value inherits from the
                    # previous SectionBreak&#x27;s SectionStyle.
                    # If the value is unset in the first SectionBreak, it inherits from
                    # DocumentStyle&#x27;s default_header_id.
                    #
                    # This property is read-only.
                &quot;evenPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for even pages. If the value of
                    # DocumentStyle&#x27;s use_even_page_header_footer is true,
                    # this value is used for the footers on even pages in the section. If it
                    # is false, the footers on even pages uses the default_footer_id. If unset, the value
                    # inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # even_page_footer_id.
                    #
                    # This property is read-only.
                &quot;columnSeparatorStyle&quot;: &quot;A String&quot;, # The style of column separators.
                    #
                    # This style can be set even when there is one column in the section.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;useFirstPageHeaderFooter&quot;: True or False, # Indicates whether to use the first page header / footer IDs for the first
                    # page of the section. If unset, it inherits from DocumentStyle&#x27;s
                    # use_first_page_header_footer for the
                    # first section. If the value is unset for subsequent sectors, it should be
                    # interpreted as false.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                &quot;firstPageHeaderId&quot;: &quot;A String&quot;, # The ID of the header used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the header on the first page of the section. If
                    # it is false, the header on the first page of the section uses the
                    # default_header_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_header_id.
                    #
                    # This property is read-only.
                &quot;firstPageFooterId&quot;: &quot;A String&quot;, # The ID of the footer used only for the first page of the section.
                    # If use_first_page_header_footer is true,
                    # this value is used for the footer on the first page of the section. If
                    # it is false, the footer on the first page of the section uses the
                    # default_footer_id.
                    # If unset, the value inherits from the previous SectionBreak&#x27;s SectionStyle. If the value is unset in
                    # the first SectionBreak, it inherits from DocumentStyle&#x27;s
                    # first_page_footer_id.
                    #
                    # This property is read-only.
                &quot;marginBottom&quot;: { # A magnitude in a single direction in the specified units. # The bottom page margin of the section. If unset, uses margin_bottom from DocumentStyle.
                    #
                    # When updating this property, setting a concrete value is required.
                    # Unsetting this property results in a 400 bad request error.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;sectionType&quot;: &quot;A String&quot;, # Output only. The type of section.
              },
              &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                  # of this content.
                &quot;A String&quot;,
              ],
            },
            &quot;paragraph&quot;: { # A StructuralElement representing a # A paragraph type of structural element.
                # paragraph. A paragraph is a range of content that is terminated with a
                # newline character.
              &quot;suggestedPositionedObjectIds&quot;: { # The IDs of the positioned objects that are suggested to be attached to this
                  # paragraph, keyed by suggestion ID.
                &quot;a_key&quot;: { # A collection of object IDs.
                  &quot;objectIds&quot;: [ # The object IDs.
                    &quot;A String&quot;,
                  ],
                },
              },
              &quot;bullet&quot;: { # Describes the bullet of a paragraph. # The bullet for this paragraph. If not present, the paragraph does not
                  # belong to a list.
                &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                    #
                    # Inherited text styles are represented as unset fields in this message. A
                    # text style&#x27;s parent depends on where the text style is defined:
                    #
                    #   * The TextStyle of text in a Paragraph
                    #     inherits from the paragraph&#x27;s corresponding named style type.
                    #   * The TextStyle on a named style
                    #     inherits from the normal text named style.
                    #   * The TextStyle of the normal text named style inherits
                    #     from the default text style in the Docs editor.
                    #   * The TextStyle on a Paragraph element
                    #     that is contained in a table may inherit its text style from the table
                    #     style.
                    #
                    # If the text style does not inherit from a parent, unsetting fields will
                    # revert the style to a value matching the defaults in the Docs editor.
                  &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                  &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                  &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                      #
                      # 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.
                    &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                        #
                        # The font family can be any font from the Font menu in Docs or from
                        # [Google Fonts] (https://fonts.google.com/). If the font name is
                        # unrecognized, the text is rendered in `Arial`.
                    &quot;weight&quot;: 42, # The weight of the font. 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.
                        #
                        # The default value is `400` (&quot;normal&quot;).
                        #
                        # The font weight makes up just one component of the rendered font weight.
                        # The rendered weight is determined by a combination of the `weight` and the
                        # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                        #
                        # * If the text is bold and the weight is less than `400`, the rendered
                        #   weight is 400.
                        # * If the text is bold and the weight is greater than or equal to `400` but
                        #   is less than `700`, the rendered weight is `700`.
                        # * If the weight is greater than or equal to `700`, the rendered weight is
                        #   equal to the weight.
                        # * If the text is not bold, the rendered weight is equal to the weight.
                  },
                  &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                      # or transparent, depending on the `color` field.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                  &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                      #   default link color 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 `&quot;ABC\n123&quot;`,
                      #   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.
                    &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                    &quot;url&quot;: &quot;A String&quot;, # An external URL.
                    &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                  },
                  &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                  &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                },
                &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
              },
              &quot;positionedObjectIds&quot;: [ # The IDs of the positioned objects tethered to this paragraph.
                &quot;A String&quot;,
              ],
              &quot;suggestedBulletChanges&quot;: { # The suggested changes to this paragraph&#x27;s bullet.
                &quot;a_key&quot;: { # A suggested change to a Bullet.
                  &quot;bulletSuggestionState&quot;: { # A mask that indicates which of the fields on the base # A mask that indicates which of the fields on the base
                      # Bullet have been changed in this suggestion.
                      # Bullet have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;listIdSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # list_id.
                    &quot;nestingLevelSuggested&quot;: True or False, # Indicates if there was a suggested change to the
                        # nesting_level.
                    &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields in text style have been changed in this
                        # suggestion.
                        # For any field set to true, there is a new suggested value.
                      &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                      &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                      &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                      &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                      &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                      &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                      &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                      &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                      &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                      &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                    },
                  },
                  &quot;bullet&quot;: { # Describes the bullet of a paragraph. # A Bullet that only includes the changes made
                      # in this suggestion. This can be used along with the
                      # bullet_suggestion_state to see which
                      # fields have changed and their new values.
                    &quot;listId&quot;: &quot;A String&quot;, # The ID of the list this paragraph belongs to.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The paragraph specific text style applied to this bullet.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;nestingLevel&quot;: 42, # The nesting level of this paragraph in the list.
                  },
                },
              },
              &quot;elements&quot;: [ # The content of the paragraph broken down into its component parts.
                { # A ParagraphElement describes content within a
                    # Paragraph.
                  &quot;pageBreak&quot;: { # A ParagraphElement representing a # A page break paragraph element.
                      # page break. A page break makes the subsequent text start at the top of the
                      # next page.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this PageBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a page break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this PageBreak, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A PageBreak
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;equation&quot;: { # A ParagraphElement representing an # An equation paragraph element.
                      # equation.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A Equation
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;footnoteReference&quot;: { # A ParagraphElement representing a # A footnote reference paragraph element.
                      # footnote reference. A footnote reference is the inline content rendered with
                      # a number and is used to identify the footnote.
                    &quot;footnoteNumber&quot;: &quot;A String&quot;, # The rendered number of this footnote.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this FootnoteReference, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this FootnoteReference.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote that
                        # contains the content of this footnote reference.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A FootnoteReference may have multiple insertion IDs if
                        # it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;inlineObjectElement&quot;: { # A ParagraphElement that contains # An inline object paragraph element.
                      # an InlineObject.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;inlineObjectId&quot;: &quot;A String&quot;, # The ID of the InlineObject this
                        # element contains.
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An InlineObjectElement may have multiple insertion IDs
                        # if it is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this InlineObjectElement.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of an inline object element can affect content layout as well as the
                        # styling of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this InlineObject, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                  },
                  &quot;textRun&quot;: { # A ParagraphElement that represents a # A text run paragraph element.
                      # run of text that all has the same styling.
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A TextRun may
                        # have multiple insertion IDs if it is a nested suggested change. If empty,
                        # then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;content&quot;: &quot;A String&quot;, # The text of this run.
                        #
                        # Any non-text elements in the run are replaced with the Unicode character
                        # U+E907.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this run, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this run.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;horizontalRule&quot;: { # A ParagraphElement representing a # A horizontal rule paragraph element.
                      # horizontal line.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this HorizontalRule.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a horizontal rule can affect content layout as well as the styling
                        # of text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this HorizontalRule, keyed by
                        # suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A HorizontalRule may have multiple insertion IDs if it
                        # is a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;autoText&quot;: { # A ParagraphElement representing a # An auto text paragraph element.
                      # spot in the text that is dynamically replaced with content that can change
                      # over time, like a page number.
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this AutoText.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                    &quot;type&quot;: &quot;A String&quot;, # The type of this auto text.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this AutoText, keyed by suggestion ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. An AutoText
                        # may have multiple insertion IDs if it is a nested suggested change. If
                        # empty, then this is not a suggested insertion.
                      &quot;A String&quot;,
                    ],
                  },
                  &quot;columnBreak&quot;: { # A ParagraphElement representing a # A column break paragraph element.
                      # column break. A column break makes the subsequent text start at the top of
                      # the next column.
                    &quot;suggestedTextStyleChanges&quot;: { # The suggested text style changes to this ColumnBreak, keyed by suggestion
                        # ID.
                      &quot;a_key&quot;: { # A suggested change to a TextStyle.
                        &quot;textStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base TextStyle have been changed in this suggestion.
                            # For any field set to true, there is a new suggested value.
                          &quot;foregroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to foreground_color.
                          &quot;strikethroughSuggested&quot;: True or False, # Indicates if there was a suggested change to strikethrough.
                          &quot;underlineSuggested&quot;: True or False, # Indicates if there was a suggested change to underline.
                          &quot;smallCapsSuggested&quot;: True or False, # Indicates if there was a suggested change to small_caps.
                          &quot;boldSuggested&quot;: True or False, # Indicates if there was a suggested change to bold.
                          &quot;fontSizeSuggested&quot;: True or False, # Indicates if there was a suggested change to font_size.
                          &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to background_color.
                          &quot;weightedFontFamilySuggested&quot;: True or False, # Indicates if there was a suggested change to weighted_font_family.
                          &quot;italicSuggested&quot;: True or False, # Indicates if there was a suggested change to italic.
                          &quot;baselineOffsetSuggested&quot;: True or False, # Indicates if there was a suggested change to baseline_offset.
                          &quot;linkSuggested&quot;: True or False, # Indicates if there was a suggested change to link.
                        },
                        &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # A TextStyle that only includes
                            # the changes made in this suggestion. This can be used along with the
                            # text_style_suggestion_state
                            # to see which fields have changed and their new values.
                            #
                            # Inherited text styles are represented as unset fields in this message. A
                            # text style&#x27;s parent depends on where the text style is defined:
                            #
                            #   * The TextStyle of text in a Paragraph
                            #     inherits from the paragraph&#x27;s corresponding named style type.
                            #   * The TextStyle on a named style
                            #     inherits from the normal text named style.
                            #   * The TextStyle of the normal text named style inherits
                            #     from the default text style in the Docs editor.
                            #   * The TextStyle on a Paragraph element
                            #     that is contained in a table may inherit its text style from the table
                            #     style.
                            #
                            # If the text style does not inherit from a parent, unsetting fields will
                            # revert the style to a value matching the defaults in the Docs editor.
                          &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                          &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                          &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                              #
                              # 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.
                            &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                                #
                                # The font family can be any font from the Font menu in Docs or from
                                # [Google Fonts] (https://fonts.google.com/). If the font name is
                                # unrecognized, the text is rendered in `Arial`.
                            &quot;weight&quot;: 42, # The weight of the font. 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.
                                #
                                # The default value is `400` (&quot;normal&quot;).
                                #
                                # The font weight makes up just one component of the rendered font weight.
                                # The rendered weight is determined by a combination of the `weight` and the
                                # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                                #
                                # * If the text is bold and the weight is less than `400`, the rendered
                                #   weight is 400.
                                # * If the text is bold and the weight is greater than or equal to `400` but
                                #   is less than `700`, the rendered weight is `700`.
                                # * If the weight is greater than or equal to `700`, the rendered weight is
                                #   equal to the weight.
                                # * If the text is not bold, the rendered weight is equal to the weight.
                          },
                          &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                            &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                            &quot;magnitude&quot;: 3.14, # The magnitude.
                          },
                          &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                          &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                              # or transparent, depending on the `color` field.
                            &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                                # a transparent color.
                              &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                                &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                                &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                                &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                              },
                            },
                          },
                          &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                          &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                              #   default link color 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 `&quot;ABC\n123&quot;`,
                              #   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.
                            &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                            &quot;url&quot;: &quot;A String&quot;, # An external URL.
                            &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                          },
                          &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                          &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                        },
                      },
                    },
                    &quot;suggestedDeletionIds&quot;: [ # The suggested deletion IDs. If empty, then there are no suggested deletions
                        # of this content.
                      &quot;A String&quot;,
                    ],
                    &quot;suggestedInsertionIds&quot;: [ # The suggested insertion IDs. A ColumnBreak may have multiple insertion IDs if it is
                        # a nested suggested change. If empty, then this is not a suggested
                        # insertion.
                      &quot;A String&quot;,
                    ],
                    &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this ColumnBreak.
                        #
                        # Similar to text content, like text runs and footnote references, the text
                        # style of a column break can affect content layout as well as the styling of
                        # text inserted adjacent to it.
                        #
                        # Inherited text styles are represented as unset fields in this message. A
                        # text style&#x27;s parent depends on where the text style is defined:
                        #
                        #   * The TextStyle of text in a Paragraph
                        #     inherits from the paragraph&#x27;s corresponding named style type.
                        #   * The TextStyle on a named style
                        #     inherits from the normal text named style.
                        #   * The TextStyle of the normal text named style inherits
                        #     from the default text style in the Docs editor.
                        #   * The TextStyle on a Paragraph element
                        #     that is contained in a table may inherit its text style from the table
                        #     style.
                        #
                        # If the text style does not inherit from a parent, unsetting fields will
                        # revert the style to a value matching the defaults in the Docs editor.
                      &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
                      &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
                      &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                          #
                          # 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.
                        &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                            #
                            # The font family can be any font from the Font menu in Docs or from
                            # [Google Fonts] (https://fonts.google.com/). If the font name is
                            # unrecognized, the text is rendered in `Arial`.
                        &quot;weight&quot;: 42, # The weight of the font. 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.
                            #
                            # The default value is `400` (&quot;normal&quot;).
                            #
                            # The font weight makes up just one component of the rendered font weight.
                            # The rendered weight is determined by a combination of the `weight` and the
                            # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                            #
                            # * If the text is bold and the weight is less than `400`, the rendered
                            #   weight is 400.
                            # * If the text is bold and the weight is greater than or equal to `400` but
                            #   is less than `700`, the rendered weight is `700`.
                            # * If the weight is greater than or equal to `700`, the rendered weight is
                            #   equal to the weight.
                            # * If the text is not bold, the rendered weight is equal to the weight.
                      },
                      &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;italic&quot;: True or False, # Whether or not the text is italicized.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                          # or transparent, depending on the `color` field.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;underline&quot;: True or False, # Whether or not the text is underlined.
                      &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                          #   default link color 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 `&quot;ABC\n123&quot;`,
                          #   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.
                        &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
                        &quot;url&quot;: &quot;A String&quot;, # An external URL.
                        &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
                      },
                      &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
                      &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
                    },
                  },
                  &quot;startIndex&quot;: 42, # The zero-based start index of this paragraph element, in UTF-16 code units.
                  &quot;endIndex&quot;: 42, # The zero-base end index of this paragraph element, exclusive, in UTF-16
                      # code units.
                },
              ],
              &quot;suggestedParagraphStyleChanges&quot;: { # The suggested paragraph style changes to this paragraph, keyed by
                  # suggestion ID.
                &quot;a_key&quot;: { # A suggested change to a
                    # ParagraphStyle.
                  &quot;paragraphStyleSuggestionState&quot;: { # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion. # A mask that indicates which of the fields on the base ParagraphStyle have been changed in this suggestion.
                      # For any field set to true, there is a new suggested value.
                    &quot;lineSpacingSuggested&quot;: True or False, # Indicates if there was a suggested change to line_spacing.
                    &quot;directionSuggested&quot;: True or False, # Indicates if there was a suggested change to direction.
                    &quot;indentEndSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_end.
                    &quot;borderBetweenSuggested&quot;: True or False, # Indicates if there was a suggested change to border_between.
                    &quot;indentStartSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_start.
                    &quot;borderBottomSuggested&quot;: True or False, # Indicates if there was a suggested change to border_bottom.
                    &quot;shadingSuggestionState&quot;: { # A mask that indicates which of the fields on the base Shading have been changed in this # A mask that indicates which of the fields in shading have been changed in
                        # this suggestion.
                        # suggested change. For any field set to true, there is a new suggested value.
                      &quot;backgroundColorSuggested&quot;: True or False, # Indicates if there was a suggested change to the Shading.
                    },
                    &quot;alignmentSuggested&quot;: True or False, # Indicates if there was a suggested change to alignment.
                    &quot;indentFirstLineSuggested&quot;: True or False, # Indicates if there was a suggested change to indent_first_line.
                    &quot;spaceBelowSuggested&quot;: True or False, # Indicates if there was a suggested change to space_below.
                    &quot;borderTopSuggested&quot;: True or False, # Indicates if there was a suggested change to border_top.
                    &quot;borderRightSuggested&quot;: True or False, # Indicates if there was a suggested change to border_right.
                    &quot;headingIdSuggested&quot;: True or False, # Indicates if there was a suggested change to heading_id.
                    &quot;namedStyleTypeSuggested&quot;: True or False, # Indicates if there was a suggested change to named_style_type.
                    &quot;keepLinesTogetherSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_lines_together.
                    &quot;spacingModeSuggested&quot;: True or False, # Indicates if there was a suggested change to spacing_mode.
                    &quot;borderLeftSuggested&quot;: True or False, # Indicates if there was a suggested change to border_left.
                    &quot;keepWithNextSuggested&quot;: True or False, # Indicates if there was a suggested change to keep_with_next.
                    &quot;spaceAboveSuggested&quot;: True or False, # Indicates if there was a suggested change to space_above.
                    &quot;avoidWidowAndOrphanSuggested&quot;: True or False, # Indicates if there was a suggested change to avoid_widow_and_orphan.
                  },
                  &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # A ParagraphStyle that only includes
                      # the changes made in this suggestion. This can be used along with the
                      # paragraph_suggestion_state
                      # to see which fields have changed and their new values.
                      #
                      # Inherited paragraph styles are represented as unset fields in this message.
                      # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                      #
                      #   * The ParagraphStyle on a Paragraph
                      #     inherits from the paragraph&#x27;s corresponding named style type.
                      #   * The ParagraphStyle on a named style
                      #     inherits from the normal text named style.
                      #   * The ParagraphStyle of the normal text named style inherits
                      #     from the default paragraph style in the Docs editor.
                      #   * The ParagraphStyle on a Paragraph
                      #     element that is contained in a table may inherit its paragraph style from
                      #     the table style.
                      #
                      # If the paragraph style does not inherit from a parent, unsetting fields will
                      # revert the style to a value matching the defaults in the Docs editor.
                    &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                        #
                        # Since updating the named style type affects other properties within
                        # ParagraphStyle, the named style type is applied before the other properties
                        # are updated.
                    &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                        # inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                        # page or column as the next paragraph if possible. If unset, the value is
                        # inherited from the parent.
                    &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                    &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                        # parent.
                      &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                    },
                    &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                        # is inherited from the parent.
                    &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                    &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                        # inherited.
                        #
                        # This property is read-only.
                      { # A tab stop within a paragraph.
                        &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                        &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                          &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                          &quot;magnitude&quot;: 3.14, # The magnitude.
                        },
                      },
                    ],
                    &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # The top border is rendered when the paragraph above has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                        # inherited from the parent.
                        #
                        # The bottom border is rendered when the paragraph below has different border
                        # and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                        # If unset, the value is inherited from the parent.
                        #
                        # The between border is rendered when the adjacent paragraph has the same
                        # border and indent properties.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;lineSpacing&quot;: 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.
                    &quot;spaceAbove&quot;: { # 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.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                        # column if possible. If unset, the value is inherited from the parent.
                    &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                        # heading.
                        #
                        # This property is read-only.
                    &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                        # LEFT_TO_RIGHT since
                        # paragraph direction is not inherited.
                    &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                        # from the parent.
                        #
                        # Paragraph borders cannot be partially updated. When making
                        # changes to a paragraph border the new border must be specified in
                        # its entirety.
                      &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                      &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                      &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                        &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                            # a transparent color.
                          &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                            &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                            &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                            &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                          },
                        },
                      },
                      &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                        &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                        &quot;magnitude&quot;: 3.14, # The magnitude.
                      },
                    },
                    &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the start of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                    &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                        # the end of the text, based on the current paragraph direction. If unset,
                        # the value is inherited from the parent.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                },
              },
              &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The style of this paragraph.
                  #
                  # Inherited paragraph styles are represented as unset fields in this message.
                  # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
                  #
                  #   * The ParagraphStyle on a Paragraph
                  #     inherits from the paragraph&#x27;s corresponding named style type.
                  #   * The ParagraphStyle on a named style
                  #     inherits from the normal text named style.
                  #   * The ParagraphStyle of the normal text named style inherits
                  #     from the default paragraph style in the Docs editor.
                  #   * The ParagraphStyle on a Paragraph
                  #     element that is contained in a table may inherit its paragraph style from
                  #     the table style.
                  #
                  # If the paragraph style does not inherit from a parent, unsetting fields will
                  # revert the style to a value matching the defaults in the Docs editor.
                &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                    #
                    # Since updating the named style type affects other properties within
                    # ParagraphStyle, the named style type is applied before the other properties
                    # are updated.
                &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                    # inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                    # page or column as the next paragraph if possible. If unset, the value is
                    # inherited from the parent.
                &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
                &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                    # parent.
                  &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                },
                &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                    # is inherited from the parent.
                &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
                &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                    # inherited.
                    #
                    # This property is read-only.
                  { # A tab stop within a paragraph.
                    &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                    &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                      &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                      &quot;magnitude&quot;: 3.14, # The magnitude.
                    },
                  },
                ],
                &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # The top border is rendered when the paragraph above has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                    # inherited from the parent.
                    #
                    # The bottom border is rendered when the paragraph below has different border
                    # and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                    # If unset, the value is inherited from the parent.
                    #
                    # The between border is rendered when the adjacent paragraph has the same
                    # border and indent properties.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;lineSpacing&quot;: 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.
                &quot;spaceAbove&quot;: { # 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.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                    # column if possible. If unset, the value is inherited from the parent.
                &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                    # heading.
                    #
                    # This property is read-only.
                &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                    # LEFT_TO_RIGHT since
                    # paragraph direction is not inherited.
                &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                    # from the parent.
                    #
                    # Paragraph borders cannot be partially updated. When making
                    # changes to a paragraph border the new border must be specified in
                    # its entirety.
                  &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                  &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
                  &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                    &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                        # a transparent color.
                      &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                        &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                        &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                        &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                      },
                    },
                  },
                  &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                    &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                    &quot;magnitude&quot;: 3.14, # The magnitude.
                  },
                },
                &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the start of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
                &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                    # the end of the text, based on the current paragraph direction. If unset,
                    # the value is inherited from the parent.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            },
            &quot;endIndex&quot;: 42, # The zero-based end index of this structural element, exclusive, in UTF-16
                # code units.
          },
        ],
        &quot;footnoteId&quot;: &quot;A String&quot;, # The ID of the footnote.
      },
    },
    &quot;namedStyles&quot;: { # The named styles. Paragraphs in the document can inherit their # Output only. The named styles of the document.
        # TextStyle and
        # ParagraphStyle from these named styles.
      &quot;styles&quot;: [ # The named styles.
          #
          # There is an entry for each of the possible named style types.
        { # A named style. Paragraphs in the document can inherit their
            # TextStyle and
            # ParagraphStyle from this named style
            # when they have the same named style type.
          &quot;paragraphStyle&quot;: { # Styles that apply to a whole paragraph. # The paragraph style of this named style.
              #
              # Inherited paragraph styles are represented as unset fields in this message.
              # A paragraph style&#x27;s parent depends on where the paragraph style is defined:
              #
              #   * The ParagraphStyle on a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The ParagraphStyle on a named style
              #     inherits from the normal text named style.
              #   * The ParagraphStyle of the normal text named style inherits
              #     from the default paragraph style in the Docs editor.
              #   * The ParagraphStyle on a Paragraph
              #     element that is contained in a table may inherit its paragraph style from
              #     the table style.
              #
              # If the paragraph style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;namedStyleType&quot;: &quot;A String&quot;, # The named style type of the paragraph.
                #
                # Since updating the named style type affects other properties within
                # ParagraphStyle, the named style type is applied before the other properties
                # are updated.
            &quot;spaceBelow&quot;: { # A magnitude in a single direction in the specified units. # The amount of extra space below the paragraph. If unset, the value is
                # inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepWithNext&quot;: True or False, # Whether at least a part of this paragraph should be laid out on the same
                # page or column as the next paragraph if possible. If unset, the value is
                # inherited from the parent.
            &quot;alignment&quot;: &quot;A String&quot;, # The text alignment for this paragraph.
            &quot;shading&quot;: { # The shading of a paragraph. # The shading of the paragraph. If unset, the value is inherited from the
                # parent.
              &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of this paragraph shading.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
            },
            &quot;avoidWidowAndOrphan&quot;: True or False, # Whether to avoid widows and orphans for the paragraph. If unset, the value
                # is inherited from the parent.
            &quot;spacingMode&quot;: &quot;A String&quot;, # The spacing mode for the paragraph.
            &quot;tabStops&quot;: [ # A list of the tab stops for this paragraph. The list of tab stops is not
                # inherited.
                #
                # This property is read-only.
              { # A tab stop within a paragraph.
                &quot;alignment&quot;: &quot;A String&quot;, # The alignment of this tab stop. If unset, the value defaults to START.
                &quot;offset&quot;: { # A magnitude in a single direction in the specified units. # The offset between this tab stop and the start margin.
                  &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                  &quot;magnitude&quot;: 3.14, # The magnitude.
                },
              },
            ],
            &quot;borderTop&quot;: { # A border around a paragraph. # The border at the top of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # The top border is rendered when the paragraph above has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderRight&quot;: { # A border around a paragraph. # The border to the right of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBottom&quot;: { # A border around a paragraph. # The border at the bottom of this paragraph. If unset, the value is
                # inherited from the parent.
                #
                # The bottom border is rendered when the paragraph below has different border
                # and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;borderBetween&quot;: { # A border around a paragraph. # The border between this paragraph and the next and previous paragraphs.
                # If unset, the value is inherited from the parent.
                #
                # The between border is rendered when the adjacent paragraph has the same
                # border and indent properties.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentFirstLine&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the first line of the paragraph. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;lineSpacing&quot;: 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.
            &quot;spaceAbove&quot;: { # 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.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;keepLinesTogether&quot;: True or False, # Whether all lines of the paragraph should be laid out on the same page or
                # column if possible. If unset, the value is inherited from the parent.
            &quot;headingId&quot;: &quot;A String&quot;, # The heading ID of the paragraph. If empty, then this paragraph is not a
                # heading.
                #
                # This property is read-only.
            &quot;direction&quot;: &quot;A String&quot;, # The text direction of this paragraph. If unset, the value defaults to
                # LEFT_TO_RIGHT since
                # paragraph direction is not inherited.
            &quot;borderLeft&quot;: { # A border around a paragraph. # The border to the left of this paragraph. If unset, the value is inherited
                # from the parent.
                #
                # Paragraph borders cannot be partially updated. When making
                # changes to a paragraph border the new border must be specified in
                # its entirety.
              &quot;padding&quot;: { # A magnitude in a single direction in the specified units. # The padding of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
              &quot;dashStyle&quot;: &quot;A String&quot;, # The dash style of the border.
              &quot;color&quot;: { # A color that can either be fully opaque or fully transparent. # The color of the border.
                &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                    # a transparent color.
                  &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                    &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                    &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                    &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                  },
                },
              },
              &quot;width&quot;: { # A magnitude in a single direction in the specified units. # The width of the border.
                &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
                &quot;magnitude&quot;: 3.14, # The magnitude.
              },
            },
            &quot;indentStart&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the start of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;indentEnd&quot;: { # A magnitude in a single direction in the specified units. # The amount of indentation for the paragraph on the side that corresponds to
                # the end of the text, based on the current paragraph direction. If unset,
                # the value is inherited from the parent.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
          },
          &quot;namedStyleType&quot;: &quot;A String&quot;, # The type of this named style.
          &quot;textStyle&quot;: { # Represents the styling that can be applied to text. # The text style of this named style.
              #
              # Inherited text styles are represented as unset fields in this message. A
              # text style&#x27;s parent depends on where the text style is defined:
              #
              #   * The TextStyle of text in a Paragraph
              #     inherits from the paragraph&#x27;s corresponding named style type.
              #   * The TextStyle on a named style
              #     inherits from the normal text named style.
              #   * The TextStyle of the normal text named style inherits
              #     from the default text style in the Docs editor.
              #   * The TextStyle on a Paragraph element
              #     that is contained in a table may inherit its text style from the table
              #     style.
              #
              # If the text style does not inherit from a parent, unsetting fields will
              # revert the style to a value matching the defaults in the Docs editor.
            &quot;strikethrough&quot;: True or False, # Whether or not the text is struck through.
            &quot;smallCaps&quot;: True or False, # Whether or not the text is in small capital letters.
            &quot;foregroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The foreground color of the text. If set, the color is either an RGB color
                # or transparent, depending on the `color` field.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;weightedFontFamily&quot;: { # Represents a font family and weight of text. # The font family and rendered weight of the text.
                #
                # 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.
              &quot;fontFamily&quot;: &quot;A String&quot;, # The font family of the text.
                  #
                  # The font family can be any font from the Font menu in Docs or from
                  # [Google Fonts] (https://fonts.google.com/). If the font name is
                  # unrecognized, the text is rendered in `Arial`.
              &quot;weight&quot;: 42, # The weight of the font. 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.
                  #
                  # The default value is `400` (&quot;normal&quot;).
                  #
                  # The font weight makes up just one component of the rendered font weight.
                  # The rendered weight is determined by a combination of the `weight` and the
                  # text style&#x27;s resolved `bold` value, after accounting for inheritance:
                  #
                  # * If the text is bold and the weight is less than `400`, the rendered
                  #   weight is 400.
                  # * If the text is bold and the weight is greater than or equal to `400` but
                  #   is less than `700`, the rendered weight is `700`.
                  # * If the weight is greater than or equal to `700`, the rendered weight is
                  #   equal to the weight.
                  # * If the text is not bold, the rendered weight is equal to the weight.
            },
            &quot;fontSize&quot;: { # A magnitude in a single direction in the specified units. # The size of the text&#x27;s font.
              &quot;unit&quot;: &quot;A String&quot;, # The units for magnitude.
              &quot;magnitude&quot;: 3.14, # The magnitude.
            },
            &quot;italic&quot;: True or False, # Whether or not the text is italicized.
            &quot;backgroundColor&quot;: { # A color that can either be fully opaque or fully transparent. # The background color of the text. If set, the color is either an RGB color
                # or transparent, depending on the `color` field.
              &quot;color&quot;: { # A solid color. # If set, this will be used as an opaque color. If unset, this represents
                  # a transparent color.
                &quot;rgbColor&quot;: { # An RGB color. # The RGB color value.
                  &quot;blue&quot;: 3.14, # The blue component of the color, from 0.0 to 1.0.
                  &quot;red&quot;: 3.14, # The red component of the color, from 0.0 to 1.0.
                  &quot;green&quot;: 3.14, # The green component of the color, from 0.0 to 1.0.
                },
              },
            },
            &quot;underline&quot;: True or False, # Whether or not the text is underlined.
            &quot;link&quot;: { # A reference to another portion of a document or an external URL resource. # 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 updated to the
                #   default link color 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 `&quot;ABC\n123&quot;`,
                #   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.
              &quot;headingId&quot;: &quot;A String&quot;, # The ID of a heading in this document.
              &quot;url&quot;: &quot;A String&quot;, # An external URL.
              &quot;bookmarkId&quot;: &quot;A String&quot;, # The ID of a bookmark in this document.
            },
            &quot;bold&quot;: True or False, # Whether or not the text is rendered as bold.
            &quot;baselineOffset&quot;: &quot;A String&quot;, # The text&#x27;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.
          },
        },
      ],
    },
    &quot;namedRanges&quot;: { # Output only. The named ranges in the document, keyed by name.
      &quot;a_key&quot;: { # A collection of all the NamedRanges in the
          # document that share a given name.
        &quot;namedRanges&quot;: [ # The NamedRanges that share the same name.
          { # A collection of Ranges with the same named range
              # ID.
              #
              # Named ranges allow developers to associate parts of a document with an
              # arbitrary user-defined label so their contents can be programmatically read
              # or edited at a later time. A document can contain multiple named ranges with
              # the same name, but every named range has a unique ID.
              #
              # A named range is created with a single Range,
              # and content inserted inside a named range generally expands that range.
              # However, certain document changes can cause the range to be split into
              # multiple ranges.
              #
              # Named ranges are not private. All applications and collaborators that have
              # access to the document can see its named ranges.
            &quot;name&quot;: &quot;A String&quot;, # The name of the named range.
            &quot;namedRangeId&quot;: &quot;A String&quot;, # The ID of the named range.
            &quot;ranges&quot;: [ # The ranges that belong to this named range.
              { # Specifies a contiguous range of text.
                &quot;segmentId&quot;: &quot;A String&quot;, # The ID of the header, footer or footnote that this range is contained in.
                    # An empty segment ID signifies the document&#x27;s body.
                &quot;startIndex&quot;: 42, # The zero-based start index of this range, in UTF-16 code units.
                    #
                    # In all current uses, a start index must be provided. This field is an
                    # Int32Value in order to accommodate future use cases with open-ended ranges.
                &quot;endIndex&quot;: 42, # The zero-based end index of this range, exclusive, in UTF-16 code units.
                    #
                    # In all current uses, an end index must be provided. This field is an
                    # Int32Value in order to accommodate future use cases with open-ended ranges.
              },
            ],
          },
        ],
        &quot;name&quot;: &quot;A String&quot;, # The name that all the named ranges share.
      },
    },
  }</pre>
</div>

</body></html>