diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6f70702b16f0e2877e00fab759e3b13c5956ee0e..881f64e935449c02070f7b12d56205daef7864f0 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,6 +4,10 @@
   <component name="FrameworkDetectionExcludesConfiguration">
     <file type="web" url="file://$PROJECT_DIR$" />
   </component>
+  <component name="PWA">
+    <option name="enabled" value="true" />
+    <option name="wasEnabledAtLeastOnce" value="true" />
+  </component>
   <component name="ProjectRootManager" version="2" languageLevel="JDK_16_PREVIEW" project-jdk-name="16" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
diff --git a/build.gradle.kts b/build.gradle.kts
index 2c07b8fe7dae2eb162dc82af8edb8707ce438ae7..f4b287456520dcc740f58bd745036d99a1e27fa1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -14,6 +14,15 @@ repositories {
     maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
 }
 
+tasks.register("fixGapiBindingBug") {
+    doFirst {
+        exec {
+            // TODO, make it cross platform, maybe not exec
+            commandLine("bash", "-c", "sed -i 's/@file:Suppress(/@file:Suppress(\"NAME_CONTAINS_ILLEGAL_CHARS\", /g' build/externals/kemence/src/*.kt")
+        }
+    }
+}
+
 kotlin {
     js(IR) {
         browser {
@@ -26,7 +35,11 @@ kotlin {
                 implementation(compose.web.core)
                 implementation(compose.runtime)
                 implementation("com.github.doyaaaaaken:kotlin-csv-js:1.2.0")
+                //implementation(npm("@types/gapi", "0.0.41", generateExternals = true))
+                //implementation(npm("@types/gapi.client.sheets", "4.0.20201029", generateExternals = true))
+                //implementation(npm("@types/gapi.auth2", "0.0.55", generateExternals = true))
             }
+            //project.tasks.named("jsGenerateExternalsIntegrated") { finalizedBy("fixGapiBindingBug") }
         }
     }
 }
diff --git a/gradle.properties b/gradle.properties
index 65c9278611beb854769bad4b045ede51a75faa83..3c040b323b4886faafa87fea9ef93450f0932d90 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,3 +2,4 @@ kotlin.code.style=official
 kotlin.mpp.enableGranularSourceSetsMetadata=true
 kotlin.native.enableDependencyPropagation=false
 kotlin.js.webpack.major.version=4
+kotlin.js.generate.externals=true
\ No newline at end of file
diff --git a/src/jsMain/kotlin/DataInjector.kt b/src/jsMain/kotlin/DataInjector.kt
deleted file mode 100644
index eb87a906c78776d0924624450551a6590a6dd274..0000000000000000000000000000000000000000
--- a/src/jsMain/kotlin/DataInjector.kt
+++ /dev/null
@@ -1,14 +0,0 @@
-object DataInjector {
-    @JsName("Test")
-    var test = ""
-    @JsName("alma")
-    var alma = ""
-}
-
-operator fun DataInjector.get(key: String): String? {
-    return DataInjector.asDynamic()[key] as? String
-}
-
-operator fun DataInjector.set(key: String, value: String) {
-    DataInjector.asDynamic()[key] = value
-}
\ No newline at end of file
diff --git a/src/jsMain/kotlin/Main.kt b/src/jsMain/kotlin/Main.kt
index 08cac8cb21288074407c07737fb3c33db17ada34..c044e3bff96dcdcc447329c978bf2e79dc034251 100644
--- a/src/jsMain/kotlin/Main.kt
+++ b/src/jsMain/kotlin/Main.kt
@@ -1,15 +1,15 @@
-import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.setValue
+import androidx.compose.runtime.*
+import gapi.initGapi
+import gapi.loadGapi
 import kotlinx.browser.document
+import kotlinx.coroutines.launch
 import org.jetbrains.compose.web.attributes.disabled
 import org.jetbrains.compose.web.dom.*
 import org.jetbrains.compose.web.renderComposable
+import processing.format
+import ui.*
+import ui.State
 
-sealed class State
-class ImportInProgress(val progress: Double): State()
-object Ready: State()
 
 fun main() {
     val row = document.querySelector("#content-main > div.uk-clearfix.uk-margin-bottom")
@@ -21,13 +21,20 @@ fun main() {
     document.title = document.title.replace("PéK", "PéK \uD83D\uDC68\u200D\uD83C\uDF73")
 
     renderComposable(root = rootDiv) {
+        var google by remember { mutableStateOf(false) }
         var state by remember { mutableStateOf<State>(Ready) }
+        val scope = rememberCoroutineScope()
+        scope.launch {
+            loadGapi()
+            initGapi()
+            google = true
+        }
 
         divFloatRight {
             val magicId = "csv-magic"
             Button({
                 classes("uk-button", "uk-button-small", "uk-button-success")
-                attr("data-uk-modal", "{ target: '#$magicId' }")
+                attr("data-uk-ui.modal", "{ target: '#$magicId' }")
                 if (state != Ready)
                     disabled()
             }){
@@ -44,9 +51,35 @@ fun main() {
             }
             Div({
                 id(magicId)
-                classes("uk-modal")
+                classes("uk-ui.modal")
+            }) {
+                csvModal { state = it }
+            }
+        }
+        divFloatRight {
+            val magicId = "google-magic"
+            Button({
+                classes("uk-button", "uk-button-small", "uk-button-success")
+                attr("data-uk-ui.modal", "{ target: '#$magicId' }")
+                if (state != Ready || !google)
+                    disabled()
+            }){
+                var txt = "..."
+                val curState = state
+                if (curState == Ready) {
+                    txt = "Google Sheets import \uD83D\uDC68\u200D\uD83C\uDF73"
+                } else if (curState is ImportInProgress) {
+                    val progress = (curState.progress * 100.0).format()
+                    txt = "Importálás ($progress%)"
+                }
+
+                Text(txt)
+            }
+            Div({
+                id(magicId)
+                classes("uk-ui.modal")
             }) {
-                modal { state = it }
+                sheetsModal { state = it }
             }
         }
     }
diff --git a/src/jsMain/kotlin/Modal.kt b/src/jsMain/kotlin/Modal.kt
deleted file mode 100644
index b9da873db8402a720c457c017ea1e0119f24b79f..0000000000000000000000000000000000000000
--- a/src/jsMain/kotlin/Modal.kt
+++ /dev/null
@@ -1,151 +0,0 @@
-import androidx.compose.runtime.*
-import kotlinx.browser.document
-import kotlinx.browser.window
-import kotlinx.coroutines.DelicateCoroutinesApi
-import kotlinx.coroutines.GlobalScope
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
-import org.jetbrains.compose.web.attributes.InputType
-import org.jetbrains.compose.web.attributes.disabled
-import org.jetbrains.compose.web.css.background
-import org.jetbrains.compose.web.css.color
-import org.jetbrains.compose.web.css.rgb
-import org.jetbrains.compose.web.dom.*
-import org.w3c.dom.HTMLAnchorElement
-import org.w3c.dom.HTMLElement
-import org.w3c.files.get
-
-@Composable
-fun modal(setState: (State) -> Unit) {
-    Div({
-        classes("uk-modal-dialog", "uk-text-justify")
-    }) {
-        val closeId = "kemence-modal-close"
-        A(attrs = {
-            id(closeId)
-            classes("uk-modal-close", "uk-close")
-        }) {  }
-        H2 {
-            Text("CSV import")
-        }
-        H4 {
-            Text("Mi is ez?")
-        }
-        Text("Válassz ki egy CSV filet, ami megfelel a következő követelményeknek:")
-        Ul {
-            Li { Text("az első sorában a pontozási elvek szerepelnek") }
-        }
-        Ul {
-            Li { Text("az első oszlopa az emberek neveit tartalmazza") }
-        }
-        Ul {
-            Li { Text("a közte lévő rész értelemszerűen van kitöltve") }
-        }
-        Ul {
-            Li { Text("tartalmazhat a táblázat szumma oszlopokat, " +
-                    "azok automatikusan ignorálva lesznek, amennyiben tartalmazzák a szumma szót") }
-        }
-        P { Text("Példa táblázat:") }
-        Table({classes("uk-table")}) {
-            Thead { Tr {
-                Th { Text("Név") }
-                Th { Text("Gyűlésen alvás") }
-                Th { Text("Közös liftezés") }
-                Th { Text("Szumma munka") }
-            } }
-            Tbody { Tr {
-                Td { Text("Teszt Elek") }
-                Td { Text("5") }
-                Td { Text("8") }
-                Td { Text("13") }
-            } }
-            Tbody { Tr {
-                Td { Text("Techno Kolos ") }
-                Td { Text("7") }
-                Td { Text("3") }
-                Td { Text("10") }
-            } }
-        }
-        Hr {  }
-        val scope = rememberCoroutineScope()
-        var csvTable by remember { mutableStateOf<CSVTable?>(null) }
-
-        val valassz = "hint: válassz ki fájlt"
-        var hint by remember { mutableStateOf(valassz) }
-
-        Input(type = InputType.File, attrs = {
-            classes("uk-button", "uk-button-small")
-            onChange {
-                if (it.value.isBlank()) {
-                    hint = valassz
-                    return@onChange
-                }
-                scope.launch {
-                    val content = it.target.getFileContents()
-                    content?.let { csv ->
-                        try {
-                            csvTable = CSVTable(csv)
-                        } catch (e: Exception) {
-                            hint = "hibás CSV fájl (infó a console-ban)"
-                            e.printStackTrace()
-                        }
-                        hint = ""
-                    }
-                }
-            }
-        })
-        Hr {  }
-        divFloatRight {
-            Button({
-                classes("uk-button", "uk-button-primary")
-                onClick {
-                    scope.launch {
-                        try {
-                            csvTable?.process { setState(ImportInProgress(it)) }
-                        } catch (e: ProcessingError) {
-                            delay(100)
-                            window.alert(e.toString())
-                        }
-                        setState(Ready)
-                    }
-                    (document.getElementById(closeId) as HTMLElement).click()
-                }
-                if (hint.isNotBlank()) {
-                    disabled()
-                }
-            }) {
-                Text("Zsa!")
-            }
-        }
-
-        divFloatRight {
-            Button({
-                classes("uk-button", "uk-button-danger")
-                onClick {
-                    scope.launch {
-                        PekTable.clear { setState(ImportInProgress(it)) }
-                        setState(Ready)
-                    }
-                    (document.getElementById(closeId) as HTMLElement).click()
-                }
-            }) {
-                Text("PéKen lévő adatok törlése")
-            }
-        }
-        divFloatRight {
-            Button({
-                classes("uk-button")
-                style {
-                    background("#0000")
-                    color(rgb(0x55, 0x55, 0x55))
-                }
-                disabled()
-            }) {
-                Text(hint)
-            }
-        }
-
-        Br {  }
-    }
-
-}
\ No newline at end of file
diff --git a/src/jsMain/kotlin/CSVTable.kt b/src/jsMain/kotlin/datasources/CSVTable.kt
similarity index 95%
rename from src/jsMain/kotlin/CSVTable.kt
rename to src/jsMain/kotlin/datasources/CSVTable.kt
index c2fb95db8657f9c8dde8e80f83a6b015709a3b52..39dc918852752856cdbc22155483c12488028060 100644
--- a/src/jsMain/kotlin/CSVTable.kt
+++ b/src/jsMain/kotlin/datasources/CSVTable.kt
@@ -1,4 +1,7 @@
+package datasources
+
 import com.github.doyaaaaaken.kotlincsv.dsl.csvReader
+import pekstuff.trimAsPrinciple
 
 class CSVTable(data: String) {
     private val rows = csvReader().readAll(data)
diff --git a/src/jsMain/kotlin/datasources/GSheet.kt b/src/jsMain/kotlin/datasources/GSheet.kt
new file mode 100644
index 0000000000000000000000000000000000000000..cec5899f78a7b7a1a667cd636b857d8eb666b16f
--- /dev/null
+++ b/src/jsMain/kotlin/datasources/GSheet.kt
@@ -0,0 +1,48 @@
+package datasources
+
+import gapi.gapi
+import gapi.isSignedIn
+import gapi.sheets
+import kotlin.coroutines.resume
+import kotlin.coroutines.resumeWithException
+import kotlin.coroutines.suspendCoroutine
+
+class GSheet private constructor() {
+    companion object {
+        suspend fun new(url: String): GSheet {
+            if (!isSignedIn()) throw Error("You must sign in to get gapi.sheets")
+
+            val sheet = GSheet()
+            sheet.setUrl(url)
+            return sheet
+        }
+    }
+
+    private var _url = ""
+    suspend fun setUrl(value: String){
+        _url = value
+        loadSheet()
+    }
+
+    val url: String get() = _url
+
+    private suspend fun getSheetFromUrl() = suspendCoroutine<sheets.Spreadsheet> { cont ->
+        gapi.client.sheets.spreadsheets.get(object: sheets.SpreadsheetGetType {
+            override var spreadsheetId = url
+                .removePrefix("https://docs.google.com/spreadsheets/d/")
+                .split("/")[0]
+        }).execute {
+            if (it.status != 200) {
+                cont.resumeWithException(Error("unable to load sheet: ${it.statusText}"))
+                return@execute Unit
+            }
+            cont.resume(it.result)
+        }
+    }
+
+    private suspend fun loadSheet() {
+        sheet = getSheetFromUrl()
+    }
+
+    private lateinit var sheet: sheets.Spreadsheet
+}
diff --git a/src/jsMain/kotlin/gapi/Gapi.kt b/src/jsMain/kotlin/gapi/Gapi.kt
new file mode 100644
index 0000000000000000000000000000000000000000..92b6da6d804c75445b3f7e7bdabf82abe8cadbec
--- /dev/null
+++ b/src/jsMain/kotlin/gapi/Gapi.kt
@@ -0,0 +1,59 @@
+package gapi
+
+import kotlin.coroutines.resume
+import kotlin.coroutines.suspendCoroutine
+
+object authObj: client.AuthType {
+    override var apiKey: String? = "AIzaSyAllJ7f4_uUKUUhbYg6U6edtJHah94HJow"
+    override var clientId: String? = "418498906920-jom9gd0his9sr91843qeqekf90h1hocj.apps.googleusercontent.com"
+    override var scope: String? = "https://www.googleapis.com/auth/spreadsheets.readonly"
+    override var discoveryDocs: Array<String>? = arrayOf("https://sheets.googleapis.com/\$discovery/rest?version=v4")
+}
+
+private val listeners = mutableListOf<(Boolean) -> Unit>()
+
+fun listenForLoginEvents(callback: (Boolean) -> Unit) {
+    listeners += callback
+}
+
+suspend fun loadGapi() = suspendCoroutine<Unit> { cont ->
+    gapi.load(apiName = "gapi.client:gapi.auth2") { cont.resume(Unit) }
+}
+
+private fun handleLoginEvent(isSignedIn: Boolean) {
+    listeners.forEach {
+        it(isSignedIn)
+    }
+}
+
+suspend fun initGapi() = suspendCoroutine<Unit> { cont ->
+    gapi.client.init(authObj).then({
+        cont.resume(Unit)
+        gapi.auth2.getAuthInstance().isSignedIn.listen { isSignedIn: Boolean ->
+            handleLoginEvent(isSignedIn)
+            println(isSignedIn)
+        }
+
+        logIn = {
+            gapi.auth2.getAuthInstance().signIn()
+        }
+
+        logOut = {
+            gapi.auth2.getAuthInstance().signOut()
+        }
+
+        isSignedIn = {
+            gapi.auth2.getAuthInstance().isSignedIn.get()
+        }
+
+        handleLoginEvent(isSignedIn())
+    }, { error: Throwable ->
+        println(error)
+    })
+
+    Unit
+}
+
+var logIn: () -> Unit = { throw Error("gapi.getGapi has not been initialized yet") }
+var logOut: () -> Unit = { throw Error("gapi.getGapi has not been initialized yet") }
+var isSignedIn: () -> Boolean = { false }
\ No newline at end of file
diff --git a/src/jsMain/kotlin/gapi/GapiBinding.kt b/src/jsMain/kotlin/gapi/GapiBinding.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b25b4266bdce32e28b9939b731b90e1af9eb1272
--- /dev/null
+++ b/src/jsMain/kotlin/gapi/GapiBinding.kt
@@ -0,0 +1,4898 @@
+@file:Suppress("NAME_CONTAINS_ILLEGAL_CHARS", "INTERFACE_WITH_SUPERCLASS", "OVERRIDING_FINAL_MEMBER", "RETURN_TYPE_MISMATCH_ON_OVERRIDE", "CONFLICTING_OVERLOADS")
+
+package gapi
+
+import kotlin.js.Promise
+
+external val gapi: Gapi = definedExternally
+
+external class auth {
+    interface `T$1` {
+        var client_id: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var immediate: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var response_type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scope: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var authuser: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    fun authorize(params: `T$1`, callback: (token: GoogleApiOAuth2TokenObject) -> Any)
+
+    fun init(callback: () -> Any)
+
+    fun getToken(): GoogleApiOAuth2TokenObject
+
+    fun setToken(token: GoogleApiOAuth2TokenObject)
+
+    interface `T$2` {
+        var clientid: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var cookiepolicy: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: (() -> Unit)?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includegrantedscopes: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var requestvisibleactions: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scope: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var apppackagename: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    fun signIn(params: `T$2`)
+
+    fun signOut()
+
+    interface GoogleApiOAuth2TokenObject {
+        var access_token: String
+        var error: String
+        var expires_in: String
+        var state: String
+    }
+
+    interface `T$3` {
+        var client_id: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var immediate: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var response_type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scope: dynamic /* String? | Array<String>? */
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    fun authorize(params: `T$3`, callback: (authResult: GoogleApiOAuth2TokenObject) -> Unit)
+}
+
+external class auth2 {
+    interface `T$33` {
+        var error: String
+        var details: String
+    }
+
+    interface `T$34` {
+        var code: String
+    }
+
+    open class GoogleAuth {
+        open var isSignedIn: IsSignedIn
+        open var currentUser: CurrentUser
+        open fun then(onInit: (googleAuth: GoogleAuth) -> Any, onFailure: (reason: `T$33`) -> Any = definedExternally): Any
+        open fun signIn(options: SigninOptions = definedExternally): Promise<GoogleUser>
+        open fun signIn(): Promise<GoogleUser>
+        open fun signIn(options: SigninOptionsBuilder = definedExternally): Promise<GoogleUser>
+        open fun signOut(): Any
+        open fun disconnect(): Any
+        open fun grantOfflineAccess(options: OfflineAccessOptions = definedExternally): Promise<`T$34`>
+        open fun attachClickHandler(container: Any, options: SigninOptions, onsuccess: (googleUser: GoogleUser) -> Any, onfailure: (reason: String) -> Any): Any
+    }
+
+    interface IsSignedIn {
+        fun get(): Boolean
+        fun listen(listener: (signedIn: Boolean) -> Any)
+    }
+
+    interface CurrentUser {
+        fun get(): GoogleUser
+        fun listen(listener: (user: GoogleUser) -> Any)
+    }
+
+    interface SigninOptions {
+        var app_package_name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fetch_basic_profile: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prompt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scope: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var ux_mode: String? /* "popup" | "redirect" */
+            get() = definedExternally
+            set(value) = definedExternally
+        var redirect_uri: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var login_hint: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface OfflineAccessOptions {
+        var scope: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prompt: String? /* "select_account" | "consent" */
+            get() = definedExternally
+            set(value) = definedExternally
+        var app_package_name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ClientConfig {
+        var client_id: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var cookie_policy: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scope: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fetch_basic_profile: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hosted_domain: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var openid_realm: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var ux_mode: String? /* "popup" | "redirect" */
+            get() = definedExternally
+            set(value) = definedExternally
+        var redirect_uri: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    open class SigninOptionsBuilder {
+        open fun setAppPackageName(name: String): Any
+        open fun setFetchBasicProfile(fetch: Boolean): Any
+        open fun setPrompt(prompt: String): Any
+        open fun setScope(scope: String): Any
+        open fun setLoginHint(hint: String): Any
+    }
+
+    interface BasicProfile {
+        fun getId(): String
+        fun getName(): String
+        fun getGivenName(): String
+        fun getFamilyName(): String
+        fun getImageUrl(): String
+        fun getEmail(): String
+    }
+
+    interface AuthResponse {
+        var access_token: String
+        var id_token: String
+        var login_hint: String
+        var scope: String
+        var expires_in: Number
+        var first_issued_at: Number
+        var expires_at: Number
+    }
+
+    interface AuthorizeConfig {
+        var client_id: String
+        var scope: String
+        var response_type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prompt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var cookie_policy: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hosted_domain: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var login_hint: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var app_package_name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var openid_realm: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var include_granted_scopes: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AuthorizeResponse {
+        var access_token: String
+        var id_token: String
+        var code: String
+        var scope: String
+        var expires_in: Number
+        var first_issued_at: Number
+        var expires_at: Number
+        var error: String
+        var error_subtype: String
+    }
+
+    interface GoogleUser {
+        fun getId(): String
+        fun isSignedIn(): Boolean
+        fun getHostedDomain(): String
+        fun getGrantedScopes(): String
+        fun getBasicProfile(): BasicProfile
+        fun getAuthResponse(includeAuthorizationData: Boolean = definedExternally): AuthResponse
+        fun reloadAuthResponse(): Promise<AuthResponse>
+        fun hasGrantedScopes(scopes: String): Boolean
+        fun grant(options: SigninOptions = definedExternally): Promise<Any>
+        fun grant(): Promise<Any>
+        fun grant(options: SigninOptionsBuilder = definedExternally): Promise<Any>
+        fun grantOfflineAccess(options: OfflineAccessOptions = definedExternally): Promise<`T$34`>
+        fun disconnect()
+    }
+
+    fun init(params: ClientConfig): GoogleAuth
+
+    fun getAuthInstance(): GoogleAuth
+
+    fun authorize(params: AuthorizeConfig, callback: (response: AuthorizeResponse) -> Unit)
+}
+
+external class client {
+    interface AuthType {
+        var apiKey: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var discoveryDocs: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var clientId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scope: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hosted_domain: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    fun init(args: AuthType): Promise<Unit>
+
+    interface RequestOptions {
+        var path: String
+        var method: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var params: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headers: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var body: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: (() -> Any)?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TokenObject {
+        var access_token: String
+    }
+
+    fun load(name: String /* "gapi.sheets" */, version: String /* "v4" */): dynamic /* Promise | PromiseLike */
+
+    fun load(name: String, version: String, callback: () -> Any, url: String = definedExternally)
+
+    fun load(name: String /* "gapi.sheets" */, version: String /* "v4" */, callback: () -> Any)
+
+    fun request(args: RequestOptions): HttpRequest<Any>
+
+    interface HttpRequestFulfilled<T> {
+        var result: T
+        var body: String
+        var headers: Array<Any>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var status: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var statusText: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface HttpRequestRejected {
+        var result: dynamic /* Any | Boolean */
+            get() = definedExternally
+            set(value) = definedExternally
+        var body: String
+        var headers: Array<Any>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var status: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var statusText: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    open class HttpRequestPromise<T> {
+        open fun then(onfulfilled: ((response: HttpRequestFulfilled<T>) -> Any?)? = definedExternally, onrejected: ((reason: HttpRequestRejected) -> Any?)? = definedExternally, opt_context: Any = definedExternally): Promise<dynamic /* TResult1 | TResult2 */>
+    }
+
+    interface `T$5` {
+        var body: String
+        var headers: Array<Any>
+        var status: Number
+        var statusText: String
+    }
+
+    open class HttpRequest<T> : HttpRequestPromise<T> {
+        open fun execute(callback: (jsonResp: T, rawResp: `T$5`) -> Any)
+    }
+
+    interface `T$6` {
+        var id: String
+        var callback: (individualResponse: Any, rawBatchResponse: Any) -> Any
+    }
+
+    open class HttpBatch {
+        open fun add(httpRequest: HttpRequest<Any>, opt_params: `T$6` = definedExternally)
+        open fun execute(callback: (responseMap: Any, rawBatchResponse: String) -> Any)
+    }
+
+    open class RpcRequest {
+        open fun callback(callback: (jsonResp: Any, rawResp: String) -> Unit)
+    }
+
+    interface `T$7` {
+        var path: String
+        var method: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var params: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headers: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var body: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    fun request(args: `T$7`): Request<Any>
+
+    interface `T$8` {
+        @nativeGetter
+        operator fun get(headerName: String): String?
+        @nativeSetter
+        operator fun set(headerName: String, value: String)
+    }
+
+    interface Response<T> {
+        var result: T
+        var body: String
+        var headers: `T$8`?
+            get() = definedExternally
+            set(value) = definedExternally
+        var status: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var statusText: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Request<T> : Promise<Response<T>> {
+        fun execute(callback: (response: Response<T>) -> Any)
+    }
+
+    interface ResponseMap<T> {
+        @nativeGetter
+        operator fun get(id: String): Response<T>?
+        @nativeSetter
+        operator fun set(id: String, value: Response<T>)
+    }
+
+    interface `T$9`<T> {
+        var id: String
+        fun callback(individualResponse: Response<T>, rawBatchResponse: String): Any
+    }
+
+    interface Batch<T> : Promise<Response<ResponseMap<T>>> {
+        fun <T> add(request: Request<T>, opt_params: `T$9`<T> = definedExternally)
+        fun execute(callback: (responseMap: ResponseMap<T>, rawBatchResponse: String) -> Any)
+    }
+
+    fun newBatch(): Batch<Any>
+
+    val sheets: sheets = definedExternally
+}
+
+external class sheets {
+    interface AddBandingRequest {
+        var bandedRange: BandedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddBandingResponse {
+        var bandedRange: BandedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddChartRequest {
+        var chart: EmbeddedChart?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddChartResponse {
+        var chart: EmbeddedChart?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddConditionalFormatRuleRequest {
+        var index: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rule: ConditionalFormatRule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddDataSourceRequest {
+        var dataSource: DataSource?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddDataSourceResponse {
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSource: DataSource?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddDimensionGroupRequest {
+        var range: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddDimensionGroupResponse {
+        var dimensionGroups: Array<DimensionGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddFilterViewRequest {
+        var filter: FilterView?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddFilterViewResponse {
+        var filter: FilterView?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddNamedRangeRequest {
+        var namedRange: NamedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddNamedRangeResponse {
+        var namedRange: NamedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddProtectedRangeRequest {
+        var protectedRange: ProtectedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddProtectedRangeResponse {
+        var protectedRange: ProtectedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddSheetRequest {
+        var properties: SheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddSheetResponse {
+        var properties: SheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddSlicerRequest {
+        var slicer: Slicer?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AddSlicerResponse {
+        var slicer: Slicer?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AppendCellsRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rows: Array<RowData>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AppendDimensionRequest {
+        var dimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var length: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AppendValuesResponse {
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tableRange: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updates: UpdateValuesResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AutoFillRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sourceAndDestination: SourceAndDestination?
+            get() = definedExternally
+            set(value) = definedExternally
+        var useAlternateSeries: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface AutoResizeDimensionsRequest {
+        var dataSourceSheetDimensions: DataSourceSheetDimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dimensions: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BandedRange {
+        var bandedRangeId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var columnProperties: BandingProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowProperties: BandingProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BandingProperties {
+        var firstBandColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var firstBandColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var footerColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var footerColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headerColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headerColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var secondBandColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var secondBandColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BaselineValueFormat {
+        var comparisonType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var description: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var negativeColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var negativeColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var position: TextPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var positiveColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var positiveColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BasicChartAxis {
+        var format: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var position: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var title: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var titleTextPosition: TextPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var viewWindowOptions: ChartAxisViewWindowOptions?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BasicChartDomain {
+        var domain: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var reversed: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BasicChartSeries {
+        var color: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataLabel: DataLabel?
+            get() = definedExternally
+            set(value) = definedExternally
+        var lineStyle: LineStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pointStyle: PointStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var series: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var styleOverrides: Array<BasicSeriesDataPointStyleOverride>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var targetAxis: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BasicChartSpec {
+        var axis: Array<BasicChartAxis>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var chartType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var compareMode: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var domains: Array<BasicChartDomain>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headerCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var interpolateNulls: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var legendPosition: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var lineSmoothing: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var series: Array<BasicChartSeries>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var stackedType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var threeDimensional: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalDataLabel: DataLabel?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BasicFilter {
+        var criteria: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterSpecs: Array<FilterSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortSpecs: Array<SortSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BasicSeriesDataPointStyleOverride {
+        var color: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var index: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pointStyle: PointStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchClearValuesByDataFilterRequest {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchClearValuesByDataFilterResponse {
+        var clearedRanges: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchClearValuesRequest {
+        var ranges: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchClearValuesResponse {
+        var clearedRanges: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchGetValuesByDataFilterRequest {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var majorDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchGetValuesByDataFilterResponse {
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueRanges: Array<MatchedValueRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchGetValuesResponse {
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueRanges: Array<ValueRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchUpdateSpreadsheetRequest {
+        var includeSpreadsheetInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var requests: Array<Request>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseIncludeGridData: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseRanges: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchUpdateSpreadsheetResponse {
+        var replies: Array<Response>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedSpreadsheet: Spreadsheet?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchUpdateValuesByDataFilterRequest {
+        var data: Array<DataFilterValueRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeValuesInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseDateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseValueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueInputOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchUpdateValuesByDataFilterResponse {
+        var responses: Array<UpdateValuesByDataFilterResponse>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedCells: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedColumns: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedRows: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedSheets: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchUpdateValuesRequest {
+        var data: Array<ValueRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeValuesInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseDateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseValueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueInputOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BatchUpdateValuesResponse {
+        var responses: Array<UpdateValuesResponse>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedCells: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedColumns: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedRows: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalUpdatedSheets: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BigQueryDataSourceSpec {
+        var projectId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var querySpec: BigQueryQuerySpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tableSpec: BigQueryTableSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BigQueryQuerySpec {
+        var rawQuery: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BigQueryTableSpec {
+        var datasetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tableId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tableProjectId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BooleanCondition {
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var values: Array<ConditionValue>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BooleanRule {
+        var condition: BooleanCondition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var format: CellFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Border {
+        var color: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var style: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var width: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Borders {
+        var bottom: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var left: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var right: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var top: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface BubbleChartSpec {
+        var bubbleBorderColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleBorderColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleLabels: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleMaxRadiusSize: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleMinRadiusSize: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleOpacity: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleSizes: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleTextStyle: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var domain: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var groupIds: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var legendPosition: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var series: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CandlestickChartSpec {
+        var data: Array<CandlestickData>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var domain: CandlestickDomain?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CandlestickData {
+        var closeSeries: CandlestickSeries?
+            get() = definedExternally
+            set(value) = definedExternally
+        var highSeries: CandlestickSeries?
+            get() = definedExternally
+            set(value) = definedExternally
+        var lowSeries: CandlestickSeries?
+            get() = definedExternally
+            set(value) = definedExternally
+        var openSeries: CandlestickSeries?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CandlestickDomain {
+        var data: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var reversed: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CandlestickSeries {
+        var data: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CellData {
+        var dataSourceFormula: DataSourceFormula?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceTable: DataSourceTable?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataValidation: DataValidationRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var effectiveFormat: CellFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var effectiveValue: ExtendedValue?
+            get() = definedExternally
+            set(value) = definedExternally
+        var formattedValue: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hyperlink: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var note: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pivotTable: PivotTable?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormatRuns: Array<TextFormatRun>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var userEnteredFormat: CellFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var userEnteredValue: ExtendedValue?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CellFormat {
+        var backgroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var backgroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var borders: Borders?
+            get() = definedExternally
+            set(value) = definedExternally
+        var horizontalAlignment: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hyperlinkDisplayType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var numberFormat: NumberFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var padding: Padding?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textDirection: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textRotation: TextRotation?
+            get() = definedExternally
+            set(value) = definedExternally
+        var verticalAlignment: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var wrapStrategy: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartAxisViewWindowOptions {
+        var viewWindowMax: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var viewWindowMin: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var viewWindowMode: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartCustomNumberFormatOptions {
+        var prefix: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var suffix: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartData {
+        var aggregateType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var columnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var groupRule: ChartGroupRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sourceRange: ChartSourceRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartDateTimeRule {
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartGroupRule {
+        var dateTimeRule: ChartDateTimeRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var histogramRule: ChartHistogramRule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartHistogramRule {
+        var intervalSize: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var maxValue: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var minValue: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartSourceRange {
+        var sources: Array<GridRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ChartSpec {
+        var altText: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var backgroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var backgroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var basicChart: BasicChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var bubbleChart: BubbleChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var candlestickChart: CandlestickChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceChartProperties: DataSourceChartProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterSpecs: Array<FilterSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fontName: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hiddenDimensionStrategy: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var histogramChart: HistogramChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var maximized: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var orgChart: OrgChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pieChart: PieChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scorecardChart: ScorecardChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortSpecs: Array<SortSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var subtitle: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var subtitleTextFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var subtitleTextPosition: TextPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var title: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var titleTextFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var titleTextPosition: TextPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var treemapChart: TreemapChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var waterfallChart: WaterfallChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ClearBasicFilterRequest {
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ClearValuesRequest
+
+    interface ClearValuesResponse {
+        var clearedRange: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Color {
+        var alpha: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var blue: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var green: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var red: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ColorStyle {
+        var rgbColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var themeColor: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ConditionalFormatRule {
+        var booleanRule: BooleanRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var gradientRule: GradientRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var ranges: Array<GridRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ConditionValue {
+        var relativeDate: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var userEnteredValue: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CopyPasteRequest {
+        var destination: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pasteOrientation: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pasteType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var source: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CopySheetToAnotherSpreadsheetRequest {
+        var destinationSpreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CreateDeveloperMetadataRequest {
+        var developerMetadata: DeveloperMetadata?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CreateDeveloperMetadataResponse {
+        var developerMetadata: DeveloperMetadata?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface CutPasteRequest {
+        var destination: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pasteType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var source: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataExecutionStatus {
+        var errorCode: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var errorMessage: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var lastRefreshTime: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var state: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataFilter {
+        var a1Range: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var developerMetadataLookup: DeveloperMetadataLookup?
+            get() = definedExternally
+            set(value) = definedExternally
+        var gridRange: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataFilterValueRange {
+        var dataFilter: DataFilter?
+            get() = definedExternally
+            set(value) = definedExternally
+        var majorDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var values: Array<Array<Any>>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataLabel {
+        var customLabelData: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var placement: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSource {
+        var calculatedColumns: Array<DataSourceColumn>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spec: DataSourceSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceChartProperties {
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceColumn {
+        var formula: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var reference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceColumnReference {
+        var name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceFormula {
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceObjectReference {
+        var chartId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceFormulaCell: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourcePivotTableAnchorCell: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceTableAnchorCell: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceObjectReferences {
+        var references: Array<DataSourceObjectReference>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceParameter {
+        var name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var namedRangeId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceRefreshDailySchedule {
+        var startTime: TimeOfDay?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceRefreshMonthlySchedule {
+        var daysOfMonth: Array<Number>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startTime: TimeOfDay?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceRefreshSchedule {
+        var dailySchedule: DataSourceRefreshDailySchedule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var enabled: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var monthlySchedule: DataSourceRefreshMonthlySchedule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var nextRun: Interval?
+            get() = definedExternally
+            set(value) = definedExternally
+        var refreshScope: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var weeklySchedule: DataSourceRefreshWeeklySchedule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceRefreshWeeklySchedule {
+        var daysOfWeek: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startTime: TimeOfDay?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceSheetDimensionRange {
+        var columnReferences: Array<DataSourceColumnReference>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceSheetProperties {
+        var columns: Array<DataSourceColumn>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceSpec {
+        var bigQuery: BigQueryDataSourceSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+        var parameters: Array<DataSourceParameter>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataSourceTable {
+        var columns: Array<DataSourceColumnReference>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var columnSelectionType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterSpecs: Array<FilterSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowLimit: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortSpecs: Array<SortSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DataValidationRule {
+        var condition: BooleanCondition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var inputMessage: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var showCustomUi: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var strict: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DateTimeRule {
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteBandingRequest {
+        var bandedRangeId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteConditionalFormatRuleRequest {
+        var index: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteConditionalFormatRuleResponse {
+        var rule: ConditionalFormatRule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDataSourceRequest {
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDeveloperMetadataRequest {
+        var dataFilter: DataFilter?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDeveloperMetadataResponse {
+        var deletedDeveloperMetadata: Array<DeveloperMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDimensionGroupRequest {
+        var range: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDimensionGroupResponse {
+        var dimensionGroups: Array<DimensionGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDimensionRequest {
+        var range: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDuplicatesRequest {
+        var comparisonColumns: Array<DimensionRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteDuplicatesResponse {
+        var duplicatesRemovedCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteEmbeddedObjectRequest {
+        var objectId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteFilterViewRequest {
+        var filterId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteNamedRangeRequest {
+        var namedRangeId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteProtectedRangeRequest {
+        var protectedRangeId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteRangeRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var shiftDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeleteSheetRequest {
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeveloperMetadata {
+        var location: DeveloperMetadataLocation?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataKey: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataValue: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibility: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeveloperMetadataLocation {
+        var dimensionRange: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var locationType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheet: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DeveloperMetadataLookup {
+        var locationMatchingStrategy: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var locationType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataKey: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataLocation: DeveloperMetadataLocation?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataValue: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibility: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DimensionGroup {
+        var collapsed: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var depth: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DimensionProperties {
+        var dataSourceColumnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var developerMetadata: Array<DeveloperMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hiddenByFilter: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hiddenByUser: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pixelSize: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DimensionRange {
+        var dimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var endIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DuplicateFilterViewRequest {
+        var filterId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DuplicateFilterViewResponse {
+        var filter: FilterView?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DuplicateSheetRequest {
+        var insertSheetIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var newSheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var newSheetName: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sourceSheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface DuplicateSheetResponse {
+        var properties: SheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Editors {
+        var domainUsersCanEdit: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var groups: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var users: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface EmbeddedChart {
+        var border: EmbeddedObjectBorder?
+            get() = definedExternally
+            set(value) = definedExternally
+        var chartId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var position: EmbeddedObjectPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spec: ChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface EmbeddedObjectBorder {
+        var color: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface EmbeddedObjectPosition {
+        var newSheet: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var overlayPosition: OverlayPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ErrorValue {
+        var message: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ExtendedValue {
+        var boolValue: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var errorValue: ErrorValue?
+            get() = definedExternally
+            set(value) = definedExternally
+        var formulaValue: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var numberValue: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var stringValue: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface FilterCriteria {
+        var condition: BooleanCondition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hiddenValues: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibleBackgroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibleBackgroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibleForegroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibleForegroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface FilterSpec {
+        var columnIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceColumnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterCriteria: FilterCriteria?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface FilterView {
+        var criteria: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterSpecs: Array<FilterSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterViewId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var namedRangeId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortSpecs: Array<SortSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var title: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface FindReplaceRequest {
+        var allSheets: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var find: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeFormulas: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var matchCase: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var matchEntireCell: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var replacement: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var searchByRegex: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface FindReplaceResponse {
+        var formulasChanged: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var occurrencesChanged: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowsChanged: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetsChanged: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valuesChanged: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface GetSpreadsheetByDataFilterRequest {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeGridData: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface GradientRule {
+        var maxpoint: InterpolationPoint?
+            get() = definedExternally
+            set(value) = definedExternally
+        var midpoint: InterpolationPoint?
+            get() = definedExternally
+            set(value) = definedExternally
+        var minpoint: InterpolationPoint?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface GridCoordinate {
+        var columnIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface GridData {
+        var columnMetadata: Array<DimensionProperties>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowData: Array<RowData>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowMetadata: Array<DimensionProperties>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startColumn: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startRow: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface GridProperties {
+        var columnCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var columnGroupControlAfter: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var frozenColumnCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var frozenRowCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hideGridlines: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowGroupControlAfter: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface GridRange {
+        var endColumnIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var endRowIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startColumnIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startRowIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface HistogramChartSpec {
+        var bucketSize: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var legendPosition: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var outlierPercentile: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var series: Array<HistogramSeries>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var showItemDividers: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface HistogramRule {
+        var end: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var interval: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var start: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface HistogramSeries {
+        var barColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var barColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var data: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface InsertDimensionRequest {
+        var inheritFromBefore: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface InsertRangeRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var shiftDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface InterpolationPoint {
+        var color: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var value: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Interval {
+        var endTime: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startTime: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface IterativeCalculationSettings {
+        var convergenceThreshold: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var maxIterations: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface KeyValueFormat {
+        var position: TextPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface LineStyle {
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var width: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Link {
+        var uri: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ManualRule {
+        var groups: Array<ManualRuleGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ManualRuleGroup {
+        var groupName: ExtendedValue?
+            get() = definedExternally
+            set(value) = definedExternally
+        var items: Array<ExtendedValue>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface MatchedDeveloperMetadata {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var developerMetadata: DeveloperMetadata?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface MatchedValueRange {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueRange: ValueRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface MergeCellsRequest {
+        var mergeType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface MoveDimensionRequest {
+        var destinationIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var source: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface NamedRange {
+        var name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var namedRangeId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface NumberFormat {
+        var pattern: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface OrgChartSpec {
+        var labels: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var nodeColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var nodeColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var nodeSize: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var parentLabels: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var selectedNodeColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var selectedNodeColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tooltips: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface OverlayPosition {
+        var anchorCell: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+        var heightPixels: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var offsetXPixels: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var offsetYPixels: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var widthPixels: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Padding {
+        var bottom: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var left: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var right: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var top: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PasteDataRequest {
+        var coordinate: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+        var data: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var delimiter: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var html: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var type: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PieChartSpec {
+        var domain: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var legendPosition: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pieHole: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var series: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var threeDimensional: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotFilterCriteria {
+        var condition: BooleanCondition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibleByDefault: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var visibleValues: Array<String>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotFilterSpec {
+        var columnOffsetIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceColumnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterCriteria: PivotFilterCriteria?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotGroup {
+        var dataSourceColumnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var groupLimit: PivotGroupLimit?
+            get() = definedExternally
+            set(value) = definedExternally
+        var groupRule: PivotGroupRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var label: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var repeatHeadings: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var showTotals: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortOrder: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sourceColumnOffset: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueBucket: PivotGroupSortValueBucket?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueMetadata: Array<PivotGroupValueMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotGroupLimit {
+        var applyOrder: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var countLimit: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotGroupRule {
+        var dateTimeRule: DateTimeRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var histogramRule: HistogramRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var manualRule: ManualRule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotGroupSortValueBucket {
+        var buckets: Array<ExtendedValue>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valuesIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotGroupValueMetadata {
+        var collapsed: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var value: ExtendedValue?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotTable {
+        var columns: Array<PivotGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var criteria: Any?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterSpecs: Array<PivotFilterSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rows: Array<PivotGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var source: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueLayout: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var values: Array<PivotValue>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PivotValue {
+        var calculatedDisplayType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceColumnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var formula: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sourceColumnOffset: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var summarizeFunction: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface PointStyle {
+        var shape: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var size: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ProtectedRange {
+        var description: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var editors: Editors?
+            get() = definedExternally
+            set(value) = definedExternally
+        var namedRangeId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var protectedRangeId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var requestingUserCanEdit: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var unprotectedRanges: Array<GridRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var warningOnly: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface RandomizeRangeRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface RefreshDataSourceObjectExecutionStatus {
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var reference: DataSourceObjectReference?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface RefreshDataSourceRequest {
+        var dataSourceId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var force: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var isAll: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var references: DataSourceObjectReferences?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface RefreshDataSourceResponse {
+        var statuses: Array<RefreshDataSourceObjectExecutionStatus>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface RepeatCellRequest {
+        var cell: CellData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Request {
+        var addBanding: AddBandingRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addChart: AddChartRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addConditionalFormatRule: AddConditionalFormatRuleRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addDataSource: AddDataSourceRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addDimensionGroup: AddDimensionGroupRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addFilterView: AddFilterViewRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addNamedRange: AddNamedRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addProtectedRange: AddProtectedRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addSheet: AddSheetRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addSlicer: AddSlicerRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var appendCells: AppendCellsRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var appendDimension: AppendDimensionRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var autoFill: AutoFillRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var autoResizeDimensions: AutoResizeDimensionsRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var clearBasicFilter: ClearBasicFilterRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var copyPaste: CopyPasteRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var createDeveloperMetadata: CreateDeveloperMetadataRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var cutPaste: CutPasteRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteBanding: DeleteBandingRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteConditionalFormatRule: DeleteConditionalFormatRuleRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDataSource: DeleteDataSourceRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDeveloperMetadata: DeleteDeveloperMetadataRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDimension: DeleteDimensionRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDimensionGroup: DeleteDimensionGroupRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDuplicates: DeleteDuplicatesRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteEmbeddedObject: DeleteEmbeddedObjectRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteFilterView: DeleteFilterViewRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteNamedRange: DeleteNamedRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteProtectedRange: DeleteProtectedRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteRange: DeleteRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteSheet: DeleteSheetRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var duplicateFilterView: DuplicateFilterViewRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var duplicateSheet: DuplicateSheetRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var findReplace: FindReplaceRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var insertDimension: InsertDimensionRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var insertRange: InsertRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var mergeCells: MergeCellsRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var moveDimension: MoveDimensionRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var pasteData: PasteDataRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var randomizeRange: RandomizeRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var refreshDataSource: RefreshDataSourceRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var repeatCell: RepeatCellRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var setBasicFilter: SetBasicFilterRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var setDataValidation: SetDataValidationRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortRange: SortRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textToColumns: TextToColumnsRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var trimWhitespace: TrimWhitespaceRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var unmergeCells: UnmergeCellsRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateBanding: UpdateBandingRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateBorders: UpdateBordersRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateCells: UpdateCellsRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateChartSpec: UpdateChartSpecRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateConditionalFormatRule: UpdateConditionalFormatRuleRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateDataSource: UpdateDataSourceRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateDeveloperMetadata: UpdateDeveloperMetadataRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateDimensionGroup: UpdateDimensionGroupRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateDimensionProperties: UpdateDimensionPropertiesRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateEmbeddedObjectBorder: UpdateEmbeddedObjectBorderRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateEmbeddedObjectPosition: UpdateEmbeddedObjectPositionRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateFilterView: UpdateFilterViewRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateNamedRange: UpdateNamedRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateProtectedRange: UpdateProtectedRangeRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateSheetProperties: UpdateSheetPropertiesRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateSlicerSpec: UpdateSlicerSpecRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateSpreadsheetProperties: UpdateSpreadsheetPropertiesRequest?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Response {
+        var addBanding: AddBandingResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addChart: AddChartResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addDataSource: AddDataSourceResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addDimensionGroup: AddDimensionGroupResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addFilterView: AddFilterViewResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addNamedRange: AddNamedRangeResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addProtectedRange: AddProtectedRangeResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addSheet: AddSheetResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var addSlicer: AddSlicerResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var createDeveloperMetadata: CreateDeveloperMetadataResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteConditionalFormatRule: DeleteConditionalFormatRuleResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDeveloperMetadata: DeleteDeveloperMetadataResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDimensionGroup: DeleteDimensionGroupResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var deleteDuplicates: DeleteDuplicatesResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var duplicateFilterView: DuplicateFilterViewResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var duplicateSheet: DuplicateSheetResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var findReplace: FindReplaceResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var refreshDataSource: RefreshDataSourceResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var trimWhitespace: TrimWhitespaceResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateConditionalFormatRule: UpdateConditionalFormatRuleResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateDataSource: UpdateDataSourceResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateDeveloperMetadata: UpdateDeveloperMetadataResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updateEmbeddedObjectPosition: UpdateEmbeddedObjectPositionResponse?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface RowData {
+        var values: Array<CellData>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ScorecardChartSpec {
+        var aggregateType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var baselineValueData: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var baselineValueFormat: BaselineValueFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var customFormatOptions: ChartCustomNumberFormatOptions?
+            get() = definedExternally
+            set(value) = definedExternally
+        var keyValueData: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var keyValueFormat: KeyValueFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var numberFormatSource: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var scaleFactor: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SearchDeveloperMetadataRequest {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SearchDeveloperMetadataResponse {
+        var matchedDeveloperMetadata: Array<MatchedDeveloperMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SetBasicFilterRequest {
+        var filter: BasicFilter?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SetDataValidationRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rule: DataValidationRule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Sheet {
+        var bandedRanges: Array<BandedRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var basicFilter: BasicFilter?
+            get() = definedExternally
+            set(value) = definedExternally
+        var charts: Array<EmbeddedChart>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var columnGroups: Array<DimensionGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var conditionalFormats: Array<ConditionalFormatRule>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var data: Array<GridData>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var developerMetadata: Array<DeveloperMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterViews: Array<FilterView>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var merges: Array<GridRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var properties: SheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var protectedRanges: Array<ProtectedRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rowGroups: Array<DimensionGroup>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var slicers: Array<Slicer>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SheetProperties {
+        var dataSourceSheetProperties: DataSourceSheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var gridProperties: GridProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hidden: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var index: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rightToLeft: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tabColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var tabColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var title: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Slicer {
+        var position: EmbeddedObjectPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var slicerId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spec: SlicerSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SlicerSpec {
+        var applyToPivotTables: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var backgroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var backgroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var columnIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataRange: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filterCriteria: FilterCriteria?
+            get() = definedExternally
+            set(value) = definedExternally
+        var horizontalAlignment: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var title: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SortRangeRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortSpecs: Array<SortSpec>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SortSpec {
+        var backgroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var backgroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceColumnReference: DataSourceColumnReference?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dimensionIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var foregroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var foregroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sortOrder: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SourceAndDestination {
+        var dimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fillLength: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var source: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface Spreadsheet {
+        var dataSources: Array<DataSource>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSourceSchedules: Array<DataSourceRefreshSchedule>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var developerMetadata: Array<DeveloperMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var namedRanges: Array<NamedRange>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var properties: SpreadsheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheets: Array<Sheet>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetUrl: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SpreadsheetProperties {
+        var autoRecalc: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var defaultFormat: CellFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var iterativeCalculationSettings: IterativeCalculationSettings?
+            get() = definedExternally
+            set(value) = definedExternally
+        var locale: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetTheme: SpreadsheetTheme?
+            get() = definedExternally
+            set(value) = definedExternally
+        var timeZone: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var title: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SpreadsheetTheme {
+        var primaryFontFamily: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var themeColors: Array<ThemeColorPair>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TextFormat {
+        var bold: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fontFamily: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fontSize: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var foregroundColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var foregroundColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var italic: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var link: Link?
+            get() = definedExternally
+            set(value) = definedExternally
+        var strikethrough: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var underline: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TextFormatRun {
+        var format: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+        var startIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TextPosition {
+        var horizontalAlignment: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TextRotation {
+        var angle: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var vertical: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TextToColumnsRequest {
+        var delimiter: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var delimiterType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var source: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ThemeColorPair {
+        var color: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TimeOfDay {
+        var hours: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var minutes: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var nanos: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var seconds: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TreemapChartColorScale {
+        var maxValueColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var maxValueColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var midValueColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var midValueColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var minValueColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var minValueColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var noDataColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var noDataColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TreemapChartSpec {
+        var colorData: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorScale: TreemapChartColorScale?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headerColor: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var headerColorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hideTooltips: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hintedLevels: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var labels: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var levels: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var maxValue: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var minValue: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var parentLabels: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sizeData: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var textFormat: TextFormat?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TrimWhitespaceRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface TrimWhitespaceResponse {
+        var cellsChangedCount: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UnmergeCellsRequest {
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateBandingRequest {
+        var bandedRange: BandedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateBordersRequest {
+        var bottom: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var innerHorizontal: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var innerVertical: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var left: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var right: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+        var top: Border?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateCellsRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: GridRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rows: Array<RowData>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var start: GridCoordinate?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateChartSpecRequest {
+        var chartId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spec: ChartSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateConditionalFormatRuleRequest {
+        var index: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var newIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var rule: ConditionalFormatRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateConditionalFormatRuleResponse {
+        var newIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var newRule: ConditionalFormatRule?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oldIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oldRule: ConditionalFormatRule?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateDataSourceRequest {
+        var dataSource: DataSource?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateDataSourceResponse {
+        var dataExecutionStatus: DataExecutionStatus?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataSource: DataSource?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateDeveloperMetadataRequest {
+        var dataFilters: Array<DataFilter>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var developerMetadata: DeveloperMetadata?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateDeveloperMetadataResponse {
+        var developerMetadata: Array<DeveloperMetadata>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateDimensionGroupRequest {
+        var dimensionGroup: DimensionGroup?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateDimensionPropertiesRequest {
+        var dataSourceSheetRange: DataSourceSheetDimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var properties: DimensionProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: DimensionRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateEmbeddedObjectBorderRequest {
+        var border: EmbeddedObjectBorder?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var objectId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateEmbeddedObjectPositionRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var newPosition: EmbeddedObjectPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+        var objectId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateEmbeddedObjectPositionResponse {
+        var position: EmbeddedObjectPosition?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateFilterViewRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var filter: FilterView?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateNamedRangeRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var namedRange: NamedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateProtectedRangeRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var protectedRange: ProtectedRange?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateSheetPropertiesRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var properties: SheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateSlicerSpecRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var slicerId: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spec: SlicerSpec?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateSpreadsheetPropertiesRequest {
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var properties: SpreadsheetProperties?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateValuesByDataFilterResponse {
+        var dataFilter: DataFilter?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedCells: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedColumns: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedData: ValueRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedRange: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedRows: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface UpdateValuesResponse {
+        var spreadsheetId: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedCells: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedColumns: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedData: ValueRange?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedRange: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var updatedRows: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ValueRange {
+        var majorDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var values: Array<Array<Any>>?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface WaterfallChartColumnStyle {
+        var color: Color?
+            get() = definedExternally
+            set(value) = definedExternally
+        var colorStyle: ColorStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var label: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface WaterfallChartCustomSubtotal {
+        var dataIsSubtotal: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var label: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var subtotalIndex: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface WaterfallChartDomain {
+        var data: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var reversed: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface WaterfallChartSeries {
+        var customSubtotals: Array<WaterfallChartCustomSubtotal>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var data: ChartData?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dataLabel: DataLabel?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hideTrailingSubtotal: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var negativeColumnsStyle: WaterfallChartColumnStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var positiveColumnsStyle: WaterfallChartColumnStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var subtotalColumnsStyle: WaterfallChartColumnStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface WaterfallChartSpec {
+        var connectorLineStyle: LineStyle?
+            get() = definedExternally
+            set(value) = definedExternally
+        var domain: WaterfallChartDomain?
+            get() = definedExternally
+            set(value) = definedExternally
+        var firstValueIsTotal: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var hideConnectorLines: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var series: Array<WaterfallChartSeries>?
+            get() = definedExternally
+            set(value) = definedExternally
+        var stackedType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var totalDataLabel: DataLabel?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$10` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var metadataId: Number
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$11` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: SearchDeveloperMetadataRequest
+    }
+
+    interface `T$12` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$13` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: CopySheetToAnotherSpreadsheetRequest
+    }
+
+    interface `T$14` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var sheetId: Number
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SheetsResource
+
+    interface `T$15` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeValuesInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var insertDataOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var responseDateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseValueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueInputOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: ValueRange
+    }
+
+    interface `T$16` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeValuesInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var insertDataOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var responseDateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseValueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueInputOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$17` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: BatchClearValuesRequest
+    }
+
+    interface `T$18` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: BatchClearValuesByDataFilterRequest
+    }
+
+    interface `T$19` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var majorDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var ranges: dynamic /* String? | Array<String>? */
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$20` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: BatchGetValuesByDataFilterRequest
+    }
+
+    interface `T$21` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: BatchUpdateValuesRequest
+    }
+
+    interface `T$22` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: BatchUpdateValuesByDataFilterRequest
+    }
+
+    interface `T$23` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: ClearValuesRequest
+    }
+
+    interface `T$24` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$25` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var dateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var majorDimension: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$26` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeValuesInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var responseDateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseValueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueInputOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: ValueRange
+    }
+
+    interface `T$27` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeValuesInResponse: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var range: String
+        var responseDateTimeRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var responseValueRenderOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var valueInputOption: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface ValuesResource {
+        fun append(request: `T$15`): client.Request<AppendValuesResponse>
+        fun append(request: `T$16`, body: ValueRange): client.Request<AppendValuesResponse>
+        fun batchClear(request: `T$17`): client.Request<BatchClearValuesResponse>
+        fun batchClear(request: `T$12`, body: BatchClearValuesRequest): client.Request<BatchClearValuesResponse>
+        fun batchClearByDataFilter(request: `T$18`): client.Request<BatchClearValuesByDataFilterResponse>
+        fun batchClearByDataFilter(request: `T$12`, body: BatchClearValuesByDataFilterRequest): client.Request<BatchClearValuesByDataFilterResponse>
+        fun batchGet(request: `T$19` = definedExternally): client.Request<BatchGetValuesResponse>
+        fun batchGetByDataFilter(request: `T$20`): client.Request<BatchGetValuesByDataFilterResponse>
+        fun batchGetByDataFilter(request: `T$12`, body: BatchGetValuesByDataFilterRequest): client.Request<BatchGetValuesByDataFilterResponse>
+        fun batchUpdate(request: `T$21`): client.Request<BatchUpdateValuesResponse>
+        fun batchUpdate(request: `T$12`, body: BatchUpdateValuesRequest): client.Request<BatchUpdateValuesResponse>
+        fun batchUpdateByDataFilter(request: `T$22`): client.Request<BatchUpdateValuesByDataFilterResponse>
+        fun batchUpdateByDataFilter(request: `T$12`, body: BatchUpdateValuesByDataFilterRequest): client.Request<BatchUpdateValuesByDataFilterResponse>
+        fun clear(request: `T$23`): client.Request<ClearValuesResponse>
+        fun clear(request: `T$24`, body: ClearValuesRequest): client.Request<ClearValuesResponse>
+        fun get(request: `T$25` = definedExternally): client.Request<ValueRange>
+        fun update(request: `T$26`): client.Request<UpdateValuesResponse>
+        fun update(request: `T$27`, body: ValueRange): client.Request<UpdateValuesResponse>
+    }
+
+    interface `T$28` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: BatchUpdateSpreadsheetRequest
+    }
+
+    interface `T$29` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: Spreadsheet
+    }
+
+    interface `T$30` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface SpreadsheetGetType {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var includeGridData: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var ranges: dynamic /* String? | Array<String>? */
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    interface `T$32` {
+        var `$.xgafv`: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var access_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var alt: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var callback: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var fields: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var key: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var oauth_token: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var prettyPrint: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var quotaUser: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var spreadsheetId: String
+        var upload_protocol: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var uploadType: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var resource: GetSpreadsheetByDataFilterRequest
+    }
+
+    interface SpreadsheetsResource {
+        fun batchUpdate(request: `T$28`): client.Request<BatchUpdateSpreadsheetResponse>
+        fun batchUpdate(request: `T$12`, body: BatchUpdateSpreadsheetRequest): client.Request<BatchUpdateSpreadsheetResponse>
+        fun create(request: `T$29`): client.Request<Spreadsheet>
+        fun create(request: `T$30`, body: Spreadsheet): client.Request<Spreadsheet>
+        fun get(request: SpreadsheetGetType = definedExternally): client.Request<Spreadsheet>
+        fun getByDataFilter(request: `T$32`): client.Request<Spreadsheet>
+        fun getByDataFilter(request: `T$12`, body: GetSpreadsheetByDataFilterRequest): client.Request<Spreadsheet>
+        var sheets: SheetsResource
+        var values: ValuesResource
+    }
+
+    var spreadsheets: SpreadsheetsResource
+}
+
+external class signin2 {
+    interface `T$35` {
+        var error: String
+    }
+
+    interface `T$36` {
+        var scope: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        var width: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var height: Number?
+            get() = definedExternally
+            set(value) = definedExternally
+        var longtitle: Boolean?
+            get() = definedExternally
+            set(value) = definedExternally
+        var theme: String?
+            get() = definedExternally
+            set(value) = definedExternally
+        val onsuccess: ((user: auth2.GoogleUser) -> Unit)?
+        val onfailure: ((reason: `T$35`) -> Unit)?
+        var app_package_name: String?
+            get() = definedExternally
+            set(value) = definedExternally
+    }
+
+    fun render(id: Any, options: `T$36`)
+}
+
+
+external class Gapi {
+    fun load(apiName: String, callback: (Any) -> Unit)
+    val auth: auth = definedExternally
+    val auth2: auth2 = definedExternally
+    val client: client = definedExternally
+    val signin2: signin2 = definedExternally
+}
diff --git a/src/jsMain/kotlin/PekDelay.kt b/src/jsMain/kotlin/pekstuff/PekDelay.kt
similarity index 92%
rename from src/jsMain/kotlin/PekDelay.kt
rename to src/jsMain/kotlin/pekstuff/PekDelay.kt
index f0525dad9ec2e653fb61eb2a027cc038b4d5f202..87ac7548e336157b12fc03bdf6cfdb387a75e905 100644
--- a/src/jsMain/kotlin/PekDelay.kt
+++ b/src/jsMain/kotlin/pekstuff/PekDelay.kt
@@ -1,6 +1,6 @@
-import kotlinx.atomicfu.AtomicInt
+package pekstuff
+
 import kotlinx.browser.document
-import kotlinx.coroutines.delay
 import org.w3c.dom.HTMLDivElement
 import org.w3c.dom.MutationObserver
 import org.w3c.dom.MutationObserverInit
@@ -21,7 +21,6 @@ object PekDelay {
 
     private val observer = MutationObserver { _, _ ->
         if (!isUpdating) {
-            println("run called")
             val conts = continuations.toList()
             conts.forEach { it.resume(Unit) }
             continuations.removeAll(conts)
diff --git a/src/jsMain/kotlin/PekTable.kt b/src/jsMain/kotlin/pekstuff/PekTable.kt
similarity index 99%
rename from src/jsMain/kotlin/PekTable.kt
rename to src/jsMain/kotlin/pekstuff/PekTable.kt
index d656b0cd143ea37feb80f429521da9b3d0c1bc4a..2da963e33372113179f2f44c4538350d40e759a4 100644
--- a/src/jsMain/kotlin/PekTable.kt
+++ b/src/jsMain/kotlin/pekstuff/PekTable.kt
@@ -1,3 +1,5 @@
+package pekstuff
+
 import kotlinx.browser.document
 import kotlinx.coroutines.*
 import org.w3c.dom.Element
diff --git a/src/jsMain/kotlin/Utils.kt b/src/jsMain/kotlin/pekstuff/Utils.kt
similarity index 93%
rename from src/jsMain/kotlin/Utils.kt
rename to src/jsMain/kotlin/pekstuff/Utils.kt
index ed2f64c767f36a0a66c0ac84c26cf00ae91d4aa7..65d4b60e9d8f4b4329ab02b7e07c1e9bd1643eb7 100644
--- a/src/jsMain/kotlin/Utils.kt
+++ b/src/jsMain/kotlin/pekstuff/Utils.kt
@@ -1,3 +1,6 @@
+package pekstuff
+
+import processing.calcProgress
 import kotlinx.browser.document
 import org.w3c.dom.*
 import org.w3c.files.Blob
@@ -90,8 +93,3 @@ suspend fun PekTable.clear(
         }
     }
 }
-
-fun Double.format() = this.asDynamic().toFixed(1) as String
-
-fun calcProgress(i: Int, j: Int, iMax: Int, jMax: Int) =
-    (i*jMax + j).toDouble() / (iMax*jMax).toDouble()
\ No newline at end of file
diff --git a/src/jsMain/kotlin/Process.kt b/src/jsMain/kotlin/processing/ProcessCSV.kt
similarity index 95%
rename from src/jsMain/kotlin/Process.kt
rename to src/jsMain/kotlin/processing/ProcessCSV.kt
index df0c4ece41ec0fea664a7e8623440b292523855d..01c9a9d6e85468db4043ba01d4a5a58428955cb0 100644
--- a/src/jsMain/kotlin/Process.kt
+++ b/src/jsMain/kotlin/processing/ProcessCSV.kt
@@ -1,3 +1,8 @@
+package processing
+
+import datasources.CSVTable
+import pekstuff.PekDelay
+import pekstuff.PekTable
 import kotlin.math.max
 
 class ProcessingError(private val errors: List<String>): Exception(errors.toString()) {
diff --git a/src/jsMain/kotlin/processing/ProcessGSheet.kt b/src/jsMain/kotlin/processing/ProcessGSheet.kt
new file mode 100644
index 0000000000000000000000000000000000000000..1f5e19f81f3067b436f16a0943ff906288d622db
--- /dev/null
+++ b/src/jsMain/kotlin/processing/ProcessGSheet.kt
@@ -0,0 +1 @@
+package processing
\ No newline at end of file
diff --git a/src/jsMain/kotlin/processing/Utils.kt b/src/jsMain/kotlin/processing/Utils.kt
new file mode 100644
index 0000000000000000000000000000000000000000..45f09a1609483dc220da42744586ca569ff5f484
--- /dev/null
+++ b/src/jsMain/kotlin/processing/Utils.kt
@@ -0,0 +1,7 @@
+package processing
+
+
+fun Double.format() = this.asDynamic().toFixed(1) as String
+
+fun calcProgress(i: Int, j: Int, iMax: Int, jMax: Int) =
+    (i*jMax + j).toDouble() / (iMax*jMax).toDouble()
\ No newline at end of file
diff --git a/src/jsMain/kotlin/ui/CSVModal.kt b/src/jsMain/kotlin/ui/CSVModal.kt
new file mode 100644
index 0000000000000000000000000000000000000000..068cfdd247c44982c352d7648f18315177ce692e
--- /dev/null
+++ b/src/jsMain/kotlin/ui/CSVModal.kt
@@ -0,0 +1,83 @@
+package ui
+
+import datasources.CSVTable
+import processing.ProcessingError
+import androidx.compose.runtime.*
+import pekstuff.getFileContents
+import kotlinx.browser.document
+import kotlinx.browser.window
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import org.jetbrains.compose.web.attributes.InputType
+import org.jetbrains.compose.web.attributes.disabled
+import org.jetbrains.compose.web.dom.*
+import org.w3c.dom.HTMLElement
+import processing.process
+
+private object csvModal: ModalType {
+    override val title = "CSV import"
+    override val tutorial = "Válassz ki egy CSV filet, ami megfelel a következő követelményeknek:"
+
+    override @Composable fun content(
+        closeId: String,
+        setState: (State) -> Unit,
+        hint: String,
+        setHint: (String) -> Unit
+    ) {
+        val scope = rememberCoroutineScope()
+        var csvTable by remember { mutableStateOf<CSVTable?>(null) }
+
+        val valassz = "hint: válassz ki fájlt"
+
+        Input(type = InputType.File, attrs = {
+            classes("uk-button", "uk-button-small")
+            onChange {
+                if (it.value.isBlank()) {
+                    setHint(valassz)
+                    return@onChange
+                }
+                scope.launch {
+                    val content = it.target.getFileContents()
+                    content?.let { csv ->
+                        try {
+                            csvTable = CSVTable(csv)
+                        } catch (e: Exception) {
+                            setHint("hibás CSV fájl (infó a console-ban)")
+                            e.printStackTrace()
+                        }
+                        setHint("")
+                    }
+                }
+            }
+        })
+        Hr {  }
+        divFloatRight {
+            Button({
+                classes("uk-button", "uk-button-primary")
+                onClick {
+                    scope.launch {
+                        try {
+                            csvTable?.process { setState(ImportInProgress(it)) }
+                        } catch (e: ProcessingError) {
+                            delay(100)
+                            window.alert(e.toString())
+                        }
+                        setState(Ready)
+                    }
+                    (document.getElementById(closeId) as HTMLElement).click()
+                }
+                if (hint.isNotBlank()) {
+                    disabled()
+                }
+            }) {
+                Text("Zsa!")
+            }
+        }
+    }
+
+}
+
+@Composable
+fun csvModal(setState: (State) -> Unit) {
+    modal(csvModal, setState)
+}
\ No newline at end of file
diff --git a/src/jsMain/kotlin/HTMLUtils.kt b/src/jsMain/kotlin/ui/HTMLUtils.kt
similarity index 95%
rename from src/jsMain/kotlin/HTMLUtils.kt
rename to src/jsMain/kotlin/ui/HTMLUtils.kt
index e9984968838f721ba2aa15e1f44abc664987cf1b..3cc1848d0124343c6b5cdeee633e1e7a61cda2e0 100644
--- a/src/jsMain/kotlin/HTMLUtils.kt
+++ b/src/jsMain/kotlin/ui/HTMLUtils.kt
@@ -1,3 +1,5 @@
+package ui
+
 import androidx.compose.runtime.Composable
 import org.jetbrains.compose.web.dom.Div
 
diff --git a/src/jsMain/kotlin/ui/Modal.kt b/src/jsMain/kotlin/ui/Modal.kt
new file mode 100644
index 0000000000000000000000000000000000000000..aaf1b6baf89933aebceb24c86fdf0535d1e795b6
--- /dev/null
+++ b/src/jsMain/kotlin/ui/Modal.kt
@@ -0,0 +1,115 @@
+package ui
+
+import pekstuff.PekTable
+import androidx.compose.runtime.*
+import clear
+import kotlinx.browser.document
+import kotlinx.coroutines.launch
+import org.jetbrains.compose.web.attributes.disabled
+import org.jetbrains.compose.web.css.background
+import org.jetbrains.compose.web.css.color
+import org.jetbrains.compose.web.css.rgb
+import org.jetbrains.compose.web.dom.*
+import org.w3c.dom.HTMLElement
+
+interface ModalType {
+    val title: String
+    val tutorial: String
+    @Composable fun content(closeId: String, setState: (State) -> Unit, hint: String, setHint: (String) -> Unit)
+}
+
+@Composable
+fun modal(type: ModalType, setState: (State) -> Unit) {
+    Div({
+        classes("uk-ui.modal-dialog", "uk-text-justify")
+    }) {
+        val closeId = "kemence${type::class.simpleName}-ui.modal-close"
+        A(attrs = {
+            id(closeId)
+            classes("uk-ui.modal-close", "uk-close")
+        }) {  }
+        H2 {
+            Text(type.title)
+        }
+        H4 {
+            Text("Mi is ez?")
+        }
+        Text(type.tutorial)
+        Ul {
+            Li { Text("az első sorában a pontozási elvek szerepelnek") }
+        }
+        Ul {
+            Li { Text("az első oszlopa az emberek neveit tartalmazza") }
+        }
+        Ul {
+            Li { Text("a közte lévő rész értelemszerűen van kitöltve") }
+        }
+        Ul {
+            Li { Text("tartalmazhat a táblázat szumma oszlopokat, " +
+                    "azok automatikusan ignorálva lesznek, amennyiben tartalmazzák a szumma szót") }
+        }
+        P { Text("Példa táblázat:") }
+        Table({classes("uk-table")}) {
+            Thead { Tr {
+                Th { Text("Név") }
+                Th { Text("Gyűlésen alvás") }
+                Th { Text("Közös liftezés") }
+                Th { Text("Szumma munka") }
+            } }
+            Tbody { Tr {
+                Td { Text("Teszt Elek") }
+                Td { Text("5") }
+                Td { Text("8") }
+                Td { Text("13") }
+            } }
+            Tbody { Tr {
+                Td { Text("Techno Kolos ") }
+                Td { Text("7") }
+                Td { Text("3") }
+                Td { Text("10") }
+            } }
+        }
+        Hr {  }
+        var hint by remember { mutableStateOf("") }
+
+        type.content(closeId, setState, hint) { hint = it }
+
+        pekClear(closeId) { setState(it) }
+
+        divFloatRight {
+            Button({
+                classes("uk-button")
+                style {
+                    background("#0000")
+                    color(rgb(0x55, 0x55, 0x55))
+                }
+                disabled()
+            }) {
+                Text(hint)
+            }
+        }
+
+        Br {  }
+    }
+
+}
+
+@Composable
+fun pekClear(closeId: String, setState: (State) -> Unit) {
+    val scope = rememberCoroutineScope()
+
+    divFloatRight {
+        Button({
+            classes("uk-button", "uk-button-danger")
+            onClick {
+                scope.launch {
+                    PekTable.clear { setState(ImportInProgress(it)) }
+                    setState(Ready)
+                }
+                (document.getElementById(closeId) as HTMLElement).click()
+            }
+        }) {
+            Text("PéKen lévő adatok törlése")
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/jsMain/kotlin/Params.kt b/src/jsMain/kotlin/ui/Params.kt
similarity index 77%
rename from src/jsMain/kotlin/Params.kt
rename to src/jsMain/kotlin/ui/Params.kt
index 49ea7fa088837d54c2c4afcd9a50a3c3b2f7b668..7aee1f4e9e20f55a5e85fc5e479b11edf8e0dcf4 100644
--- a/src/jsMain/kotlin/Params.kt
+++ b/src/jsMain/kotlin/ui/Params.kt
@@ -1,17 +1,8 @@
+package ui
+
 import androidx.compose.runtime.*
-import org.jetbrains.compose.web.css.maxWidth
 import org.jetbrains.compose.web.dom.*
 
-@Composable
-fun params() {
-    var test by mutableStateOf("")
-    Table({
-        classes("uk-table")
-    }) {
-        inputWithLabel("test", test) { test = it }
-    }
-}
-
 @Composable
 fun inputWithLabel(
     name: String,
diff --git a/src/jsMain/kotlin/ui/SheetsModal.kt b/src/jsMain/kotlin/ui/SheetsModal.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c40ab28a035b7d86e152407d90f1ab16b179b22f
--- /dev/null
+++ b/src/jsMain/kotlin/ui/SheetsModal.kt
@@ -0,0 +1,99 @@
+package ui
+
+import datasources.GSheet
+import androidx.compose.runtime.*
+import gapi.isSignedIn
+import kotlinx.browser.document
+import kotlinx.coroutines.launch
+import gapi.listenForLoginEvents
+import gapi.logIn
+import gapi.logOut
+import org.jetbrains.compose.web.attributes.InputType
+import org.jetbrains.compose.web.attributes.disabled
+import org.jetbrains.compose.web.dom.*
+import org.w3c.dom.HTMLElement
+
+private object SheetsModal: ModalType {
+    override val title = "Google Sheets import"
+    override val tutorial = "Jelentkezz be, majd illesz be egy linket egy Google Sheetre, ami megfelel a következő követelményeknek:"
+
+    override @Composable fun content(
+        closeId: String,
+        setState: (State) -> Unit,
+        hint: String,
+        setHint: (String) -> Unit
+    ) {
+        val scope = rememberCoroutineScope()
+
+        var signedIn by remember { mutableStateOf(isSignedIn()) }
+        SideEffect {
+            listenForLoginEvents { signedIn = it }
+        }
+
+        var sheet by remember { mutableStateOf<GSheet?>(null) }
+
+        setHint(
+            if (!signedIn)  "Jelentkezz be"
+            else if (sheet == null) "Adj meg egy Google Sheet URL-t"
+            else ""
+        )
+
+        Button({
+            if (signedIn) {
+                classes("uk-button", "uk-button-danger")
+            } else {
+                classes("uk-button", "uk-button-primary")
+            }
+            onClick {
+                if(signedIn) {
+                    logOut()
+                } else {
+                    logIn()
+                }
+            }
+        }) {
+            Text(
+                if(signedIn) { "Kijelentkezés" } else { "Bejelentkezés" }
+            )
+        }
+
+        Br {}
+
+        val inputId = "kemence-sheet-input"
+        Label(inputId, {
+            classes("form-label-required", "uk-margin-right")
+        }) {
+            Text("Google Sheet URL")
+        }
+        var sheetUrl by remember { mutableStateOf("") }
+        Input(type = InputType.Text, attrs = {
+            id(inputId)
+            classes("uk-input")
+            onChange { sheetUrl = it.value }
+            value(sheetUrl)
+        })
+        Hr {  }
+        divFloatRight {
+            Button({
+                classes("uk-button", "uk-button-primary")
+                onClick {
+                    scope.launch {
+                        println("zsa")
+                    }
+                    (document.getElementById(closeId) as HTMLElement).click()
+                }
+                if (hint.isNotBlank()) {
+                    disabled()
+                }
+            }) {
+                Text("Zsa!")
+            }
+        }
+    }
+
+}
+
+@Composable
+fun sheetsModal(setState: (State) -> Unit) {
+    modal(SheetsModal, setState)
+}
\ No newline at end of file
diff --git a/src/jsMain/kotlin/ui/State.kt b/src/jsMain/kotlin/ui/State.kt
new file mode 100644
index 0000000000000000000000000000000000000000..aec83df3838583d969e5ce38f9f8bcd7cccd09bb
--- /dev/null
+++ b/src/jsMain/kotlin/ui/State.kt
@@ -0,0 +1,6 @@
+package ui
+
+
+sealed class State
+class ImportInProgress(val progress: Double): State()
+object Ready: State()
\ No newline at end of file
diff --git a/src/jsMain/resources/inject.js b/src/jsMain/resources/inject.js
index 1ee9b0baefc0d82f29a76862965b75657ccad710..daefc99d9ea2a5e873f48e3e65530a08ae20e1d3 100644
--- a/src/jsMain/resources/inject.js
+++ b/src/jsMain/resources/inject.js
@@ -1,7 +1,14 @@
+// chrome workaround
 if (typeof browser === "undefined") {
     window.browser = chrome;
 }
+
+const gapiScript = document.createElement("script");
+gapiScript.src = "https://apis.google.com/js/api.js";
+document.body.appendChild(gapiScript);
+
+// inject kemence.js
 const kemenceURL = browser.runtime.getURL("kemence.js");
-const script = document.createElement("script");
-script.src = kemenceURL;
-document.body.appendChild(script);
\ No newline at end of file
+const kemenceScript = document.createElement("script");
+kemenceScript.src = kemenceURL;
+document.body.appendChild(kemenceScript);
\ No newline at end of file