This is the scrolled contents
This is the scrolled contents
(GraphicsLayer
  (anchor 0.00 0.00)
  (bounds 800.00 600.00)
  (clips 1)
  (children 1
    (GraphicsLayer
      (bounds 800.00 600.00)
      (contentsOpaque 1)
      (children 2
        (GraphicsLayer
          (offsetFromRenderer width=-14 height=-14)
          (position 14.00 6.00)
          (bounds 408.00 288.00)
          (drawsContent 1)
          (children 2
            (GraphicsLayer
              (offsetFromRenderer width=30 height=30)
              (position 44.00 44.00)
              (bounds 320.00 200.00)
              (clips 1)
              (children 1
                (GraphicsLayer
                  (offsetFromRenderer width=30 height=30)
                  (anchor 0.00 0.00)
                  (bounds 320.00 1020.00)
                  (children 1
                    (GraphicsLayer
                      (position 10.00 10.00)
                      (bounds 300.00 1000.00)
                      (contentsOpaque 1)
                      (drawsContent 1)
                    )
                  )
                )
              )
            )
            (GraphicsLayer
              (position 44.00 44.00)
              (bounds 320.00 200.00)
              (clips 1)
              (children 1
                (GraphicsLayer
                  (position 305.00 0.00)
                  (bounds 15.00 200.00)
                  (drawsContent 1)
                )
              )
            )
          )
        )
        (GraphicsLayer
          (offsetFromRenderer width=-14 height=-14)
          (position 14.00 286.00)
          (bounds 408.00 288.00)
          (drawsContent 1)
          (children 2
            (GraphicsLayer
              (offsetFromRenderer width=30 height=30)
              (position 44.00 44.00)
              (bounds 320.00 200.00)
              (clips 1)
              (children 1
                (GraphicsLayer
                  (offsetFromRenderer width=30 height=30)
                  (bounds 320.00 200.00)
                  (clips 1)
                  (children 1
                    (GraphicsLayer
                      (offsetFromRenderer width=30 height=30)
                      (anchor 0.00 0.00)
                      (bounds 320.00 1020.00)
                      (children 1
                        (GraphicsLayer
                          (position 10.00 10.00)
                          (bounds 300.00 1000.00)
                          (contentsOpaque 1)
                          (drawsContent 1)
                        )
                      )
                    )
                  )
                )
              )
            )
            (GraphicsLayer
              (position 44.00 44.00)
              (bounds 320.00 200.00)
              (clips 1)
              (children 1
                (GraphicsLayer
                  (position 305.00 0.00)
                  (bounds 15.00 200.00)
                  (drawsContent 1)
                )
              )
            )
          )
        )
      )
    )
  )
)

