diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 4a15a1dfa..70f08cee3 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -17,11 +17,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit - name: 'Checkout Repository' uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: 'Dependency Review' - uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4.5.0 + uses: actions/dependency-review-action@ce3cf9537a52e8119d91fd484ab5b8a807627bf8 # v4.6.0 diff --git a/.github/workflows/quality-check.yml b/.github/workflows/quality-check.yml index 7a9d92805..021d53388 100644 --- a/.github/workflows/quality-check.yml +++ b/.github/workflows/quality-check.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit @@ -52,7 +52,7 @@ jobs: build-mode: manual steps: - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ce56eb19a..4decbc849 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,7 +18,7 @@ jobs: id-token: write steps: - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit @@ -43,20 +43,15 @@ jobs: # `KEY_JKS` should contain the result of: # gpg -c --armor keystore.jks # `KEY_JKS_PASSPHRASE` should contain the passphrase used for the command above - # The SkSL bundle must be produced with the same Flutter engine as the one used to build the artifact - # flutter build --bundle-sksl-path shaders.sksl.json - # do not bundle shaders for izzy/libre flavours, to avoid crashes in some environments: - # cf https://github.com/deckerst/aves/issues/388 - # cf https://github.com/deckerst/aves/issues/398 run: | echo "${{ secrets.KEY_JKS }}" > release.keystore.asc gpg -d --passphrase "${{ secrets.KEY_JKS_PASSPHRASE }}" --batch release.keystore.asc > $AVES_STORE_FILE rm release.keystore.asc mkdir outputs scripts/apply_flavor_play.sh - ./flutterw build appbundle -t lib/main_play.dart --flavor play --bundle-sksl-path shaders.sksl.json + ./flutterw build appbundle -t lib/main_play.dart --flavor play cp build/app/outputs/bundle/playRelease/*.aab outputs - ./flutterw build apk -t lib/main_play.dart --flavor play --bundle-sksl-path shaders.sksl.json + ./flutterw build apk -t lib/main_play.dart --flavor play cp build/app/outputs/apk/play/release/*.apk outputs scripts/apply_flavor_izzy.sh ./flutterw build apk -t lib/main_izzy.dart --flavor izzy --split-per-abi @@ -98,7 +93,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 753327c44..182caf4c0 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -31,7 +31,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0 + uses: step-security/harden-runner@c6295a65d1254861815972266d5933fd6e532bdf # v2.11.1 with: egress-policy: audit diff --git a/CHANGELOG.md b/CHANGELOG.md index e03cef808..e7958a5e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file. ## [Unreleased] +## [v1.12.9] - 2025-04-06 + +### Added + +- Kannada translation (thanks Chethan, Prasannakumar T Bhat) + +### Changed + +- enable Impeller rendering engine + +### Fixed + +- memory pressure during browsing + ## [v1.12.8] - 2025-03-25 ### Fixed diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index d8bb2c44e..a6671815e 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -329,12 +329,8 @@ - + android:value="true" /> diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MediaFetchObjectHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MediaFetchObjectHandler.kt index 4f0a501f8..ead151e9f 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MediaFetchObjectHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/MediaFetchObjectHandler.kt @@ -1,6 +1,8 @@ package deckers.thibault.aves.channel.calls import android.content.Context +import android.os.Handler +import android.os.Looper import androidx.core.net.toUri import com.bumptech.glide.Glide import deckers.thibault.aves.channel.calls.Coresult.Companion.safe @@ -21,7 +23,8 @@ class MediaFetchObjectHandler(private val context: Context) : MethodCallHandler override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { when (call.method) { "getEntry" -> ioScope.launch { safe(call, result, ::getEntry) } - "clearSizedThumbnailDiskCache" -> ioScope.launch { safe(call, result, ::clearSizedThumbnailDiskCache) } + "clearImageDiskCache" -> ioScope.launch { safe(call, result, ::clearImageDiskCache) } + "clearImageMemoryCache" -> ioScope.launch { safe(call, result, ::clearImageMemoryCache) } else -> result.notImplemented() } } @@ -47,11 +50,18 @@ class MediaFetchObjectHandler(private val context: Context) : MethodCallHandler }) } - private fun clearSizedThumbnailDiskCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) { + private fun clearImageDiskCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) { Glide.get(context).clearDiskCache() result.success(null) } + private fun clearImageMemoryCache(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) { + Handler(Looper.getMainLooper()).post { + Glide.get(context).clearMemory() + } + result.success(null) + } + companion object { const val CHANNEL = "deckers.thibault/aves/media_fetch_object" } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt index 73fad7469..f3d761fbb 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/RegionFetcher.kt @@ -29,10 +29,6 @@ import kotlin.math.roundToInt class RegionFetcher internal constructor( private val context: Context, ) { - private var lastDecoderRef: LastDecoderRef? = null - - private val exportUris = HashMap, Uri>() - // return decoded bytes in ARGB_8888, with trailer bytes: // - width (int32) // - height (int32) @@ -63,24 +59,12 @@ class RegionFetcher internal constructor( return } - var currentDecoderRef = lastDecoderRef - if (currentDecoderRef != null && currentDecoderRef.requestKey != requestKey) { - currentDecoderRef = null - } - try { - if (currentDecoderRef == null) { - val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input -> - BitmapRegionDecoderCompat.newInstance(input) - } - if (newDecoder == null) { - result.error("fetch-read-null", "failed to open file for mimeType=$mimeType uri=$uri regionRect=$regionRect", null) - return - } - currentDecoderRef = LastDecoderRef(requestKey, newDecoder) + val decoder = getOrCreateDecoder(uri, requestKey) + if (decoder == null) { + result.error("fetch-read-null", "failed to open file for mimeType=$mimeType uri=$uri regionRect=$regionRect", null) + return } - val decoder = currentDecoderRef.decoder - lastDecoderRef = currentDecoderRef // with raw images, the known image size may not match the decoded image size // so we scale the requested region accordingly @@ -159,6 +143,26 @@ class RegionFetcher internal constructor( } } + private fun getOrCreateDecoder(uri: Uri, requestKey: Pair): BitmapRegionDecoder? { + var decoderRef = decoderPool.firstOrNull { it.requestKey == requestKey } + if (decoderRef == null) { + val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input -> + BitmapRegionDecoderCompat.newInstance(input) + } + if (newDecoder == null) { + return null + } + decoderRef = DecoderRef(requestKey, newDecoder) + } else { + decoderPool.remove(decoderRef) + } + decoderPool.add(0, decoderRef) + while (decoderPool.size > DECODER_POOL_SIZE) { + decoderPool.removeAt(decoderPool.size - 1) + } + return decoderRef.decoder + } + private fun createTemporaryJpegExport(uri: Uri, mimeType: String, pageId: Int?): Uri { Log.d(LOG_TAG, "create JPEG export for uri=$uri mimeType=$mimeType pageId=$pageId") val target = Glide.with(context) @@ -180,7 +184,7 @@ class RegionFetcher internal constructor( } } - private data class LastDecoderRef( + private data class DecoderRef( val requestKey: Pair, val decoder: BitmapRegionDecoder, ) @@ -188,5 +192,8 @@ class RegionFetcher internal constructor( companion object { private val LOG_TAG = LogUtils.createTag() private val PREFERRED_CONFIG = Bitmap.Config.ARGB_8888 + private const val DECODER_POOL_SIZE = 3 + private val decoderPool = ArrayList() + private val exportUris = HashMap, Uri>() } } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt index afcae1453..7208bc6a3 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/fetchers/SvgRegionFetcher.kt @@ -22,8 +22,6 @@ import kotlin.math.ceil class SvgRegionFetcher internal constructor( private val context: Context, ) { - private var lastSvgRef: LastSvgRef? = null - fun fetch( uri: Uri, sizeBytes: Long?, @@ -39,32 +37,12 @@ class SvgRegionFetcher internal constructor( return } - var currentSvgRef = lastSvgRef - if (currentSvgRef != null && currentSvgRef.uri != uri) { - currentSvgRef = null - } - try { - if (currentSvgRef == null) { - val newSvg = StorageUtils.openInputStream(context, uri)?.use { input -> - try { - SVG.getFromInputStream(SVGParserBufferedInputStream(input)) - } catch (ex: SVGParseException) { - result.error("fetch-parse", "failed to parse SVG for uri=$uri regionRect=$regionRect", null) - return - } - } - - if (newSvg == null) { - result.error("fetch-read-null", "failed to open file for uri=$uri regionRect=$regionRect", null) - return - } - - newSvg.normalizeSize() - currentSvgRef = LastSvgRef(uri, newSvg) + val svg = getOrCreateDecoder(uri) + if (svg == null) { + result.error("fetch-read-null", "failed to open file for uri=$uri regionRect=$regionRect", null) + return } - val svg = currentSvgRef.svg - lastSvgRef = currentSvgRef // we scale the requested region accordingly to the viewbox size val viewBox = svg.documentViewBox @@ -110,17 +88,42 @@ class SvgRegionFetcher internal constructor( bitmap = Bitmap.createBitmap(bitmap, bleedX, bleedY, targetBitmapWidth, targetBitmapHeight) val bytes = BitmapUtils.getRawBytes(bitmap, recycle = true) result.success(bytes) + } catch (e: SVGParseException) { + result.error("fetch-parse", "failed to parse SVG for uri=$uri regionRect=$regionRect", null) } catch (e: Exception) { result.error("fetch-read-exception", "failed to initialize region decoder for uri=$uri regionRect=$regionRect", e.message) } } - private data class LastSvgRef( + private fun getOrCreateDecoder(uri: Uri): SVG? { + var decoderRef = decoderPool.firstOrNull { it.uri == uri } + if (decoderRef == null) { + val newDecoder = StorageUtils.openInputStream(context, uri)?.use { input -> + SVG.getFromInputStream(SVGParserBufferedInputStream(input)) + } + if (newDecoder == null) { + return null + } + newDecoder.normalizeSize() + decoderRef = DecoderRef(uri, newDecoder) + } else { + decoderPool.remove(decoderRef) + } + decoderPool.add(0, decoderRef) + while (decoderPool.size > DECODER_POOL_SIZE) { + decoderPool.removeAt(decoderPool.size - 1) + } + return decoderRef.decoder + } + + private data class DecoderRef( val uri: Uri, - val svg: SVG, + val decoder: SVG, ) companion object { private val PREFERRED_CONFIG = Bitmap.Config.ARGB_8888 + private const val DECODER_POOL_SIZE = 3 + private val decoderPool = ArrayList() } } diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/decoder/AvesAppGlideModule.kt b/android/app/src/main/kotlin/deckers/thibault/aves/decoder/AvesAppGlideModule.kt index 52336f25c..22c5f12f7 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/decoder/AvesAppGlideModule.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/decoder/AvesAppGlideModule.kt @@ -2,6 +2,7 @@ package deckers.thibault.aves.decoder import android.content.Context import android.net.Uri +import android.text.format.Formatter import android.util.Log import com.bumptech.glide.Glide import com.bumptech.glide.GlideBuilder @@ -10,9 +11,17 @@ import com.bumptech.glide.annotation.GlideModule import com.bumptech.glide.load.DecodeFormat import com.bumptech.glide.load.ImageHeaderParser import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPoolAdapter +import com.bumptech.glide.load.engine.bitmap_recycle.LruArrayPool +import com.bumptech.glide.load.engine.bitmap_recycle.LruBitmapPool +import com.bumptech.glide.load.engine.cache.DiskCache +import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory +import com.bumptech.glide.load.engine.cache.LruResourceCache +import com.bumptech.glide.load.engine.cache.MemorySizeCalculator import com.bumptech.glide.load.resource.bitmap.ExifInterfaceImageHeaderParser import com.bumptech.glide.module.AppGlideModule import com.bumptech.glide.request.RequestOptions +import deckers.thibault.aves.utils.LogUtils import deckers.thibault.aves.utils.MimeTypes import deckers.thibault.aves.utils.MimeTypes.isVideo import deckers.thibault.aves.utils.StorageUtils @@ -23,6 +32,30 @@ class AvesAppGlideModule : AppGlideModule() { override fun applyOptions(context: Context, builder: GlideBuilder) { // hide noisy warning (e.g. for images that can't be decoded) builder.setLogLevel(Log.ERROR) + + // sizing + val memorySizeCalculator = MemorySizeCalculator.Builder(context).build() + builder.setMemorySizeCalculator(memorySizeCalculator) + val size: Int = memorySizeCalculator.bitmapPoolSize + if (size > 0) { + builder.setBitmapPool(LruBitmapPool(size.toLong())) + } else { + builder.setBitmapPool(BitmapPoolAdapter()) + } + builder.setArrayPool(LruArrayPool(memorySizeCalculator.arrayPoolSizeInBytes)) + builder.setMemoryCache(LruResourceCache(memorySizeCalculator.memoryCacheSize.toLong())) + + val diskCacheSize = DiskCache.Factory.DEFAULT_DISK_CACHE_SIZE + val internalCacheDiskCacheFactory = InternalCacheDiskCacheFactory(context, DiskCache.Factory.DEFAULT_DISK_CACHE_DIR, diskCacheSize.toLong()) + builder.setDiskCache(internalCacheDiskCacheFactory) + + fun toMb(bytes: Int) = Formatter.formatFileSize(context, bytes.toLong()) + Log.d( + LOG_TAG, "Glide disk cache size=${toMb(diskCacheSize)}" + + ", memory cache size=${toMb(memorySizeCalculator.memoryCacheSize)}" + + ", bitmap pool size=${toMb(memorySizeCalculator.bitmapPoolSize)}" + + ", array pool size=${toMb(memorySizeCalculator.arrayPoolSizeInBytes)}" + ) } override fun registerComponents(context: Context, glide: Glide, registry: Registry) { @@ -34,6 +67,8 @@ class AvesAppGlideModule : AppGlideModule() { override fun isManifestParsingEnabled(): Boolean = false companion object { + private val LOG_TAG = LogUtils.createTag() + // request a fresh image with the highest quality format val uncachedFullImageOptions = RequestOptions() .format(DecodeFormat.PREFER_ARGB_8888) diff --git a/android/app/src/main/res/values-kn/strings.xml b/android/app/src/main/res/values-kn/strings.xml index 2d54ecbf4..c4900bd13 100644 --- a/android/app/src/main/res/values-kn/strings.xml +++ b/android/app/src/main/res/values-kn/strings.xml @@ -1,6 +1,6 @@ - Aves + ಎವೀಸ್ ಫೋಟೋ ಫ್ರೇಮ್ ವಾಲ್ಪೇಪರ್ ವೀಡಿಯೊಗಳು @@ -8,4 +8,5 @@ ಮೀಡಿಯಾ ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ ನಿಲ್ಲಿಸಿ ಹುಡುಕಿ - \ No newline at end of file + ನಕ್ಷೆ + diff --git a/android/app/src/main/res/values-or/strings.xml b/android/app/src/main/res/values-or/strings.xml index 1ed61adfe..bec8cc7cc 100644 --- a/android/app/src/main/res/values-or/strings.xml +++ b/android/app/src/main/res/values-or/strings.xml @@ -1,4 +1,4 @@ ସନ୍ଧାନ - \ No newline at end of file + diff --git a/assets/terms.txt b/assets/terms.txt new file mode 100644 index 000000000..dc24a3327 --- /dev/null +++ b/assets/terms.txt @@ -0,0 +1,35 @@ +Terms of Service +================ + +“Aves Gallery” is an open-source gallery and metadata explorer app allowing you to access and manage your local photos and videos. + +The app is designed for legal, authorized and acceptable purposes. + + + +Disclaimer +========== + +The app is released “as-is”, without any warranty, responsibility or liability. Use of the app is at your own risk. + + + +Privacy Policy +============== + +The app does not collect any personal data. We never have access to your photos and videos. This also means that we cannot get them back for you if you delete them without backing them up. + +Optionally, with your consent, the app accesses the inventory of installed apps to improve album display. + +Optionally, with your consent, the app collects anonymous error and diagnostic data to improve the app quality. We use Firebase Crashlytics, and the anonymous data are stored on their servers. Please note that those are anonymous data, there is absolutely nothing personal about those data. + + + +Contact +======= + +Developer: Thibault Deckers + +Email: gallery.aves@gmail.com + +Website: https://github.com/deckerst/aves diff --git a/fastlane/metadata/android/de/full_description.txt b/fastlane/metadata/android/de/full_description.txt index 820329540..840699c7e 100644 --- a/fastlane/metadata/android/de/full_description.txt +++ b/fastlane/metadata/android/de/full_description.txt @@ -2,4 +2,4 @@ Navigation und Suche ist ein wichtiger Bestandteil von Aves. Das Ziel besteht darin, dass Benutzer problemlos von Alben zu Fotos zu Tags zu Karten usw. wechseln können. -Aves lässt sich mit Android mit Funktionen wie App-Verknüpfungen und globaler Suche integrieren. Es funktioniert auch als Medienbetrachter und -auswahl. +Aves integriert sich in Android (einschließlich Android TV) mit Funktionen wie Widgets, App-Shortcuts, Bildschirmschoner und der globalen Suche integrieren. Sie funktioniert auch als Medienbetrachter und -Picker. diff --git a/fastlane/metadata/android/en-US/changelogs/149.txt b/fastlane/metadata/android/en-US/changelogs/149.txt new file mode 100644 index 000000000..53217c088 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/149.txt @@ -0,0 +1,4 @@ +In v1.12.9: +- play more kinds of motion photos +- enjoy the app in Galician and Kannada +Full changelog available on GitHub \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/14901.txt b/fastlane/metadata/android/en-US/changelogs/14901.txt new file mode 100644 index 000000000..53217c088 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/14901.txt @@ -0,0 +1,4 @@ +In v1.12.9: +- play more kinds of motion photos +- enjoy the app in Galician and Kannada +Full changelog available on GitHub \ No newline at end of file diff --git a/fastlane/metadata/android/kn/full_description.txt b/fastlane/metadata/android/kn/full_description.txt index 23a3d6235..ffb1b1e89 100644 --- a/fastlane/metadata/android/kn/full_description.txt +++ b/fastlane/metadata/android/kn/full_description.txt @@ -1,5 +1,5 @@ -Aves can handle all sorts of images and videos, including your typical JPEGs and MP4s, but also more exotic things like multi-page TIFFs, SVGs, old AVIs and more! It scans your media collection to identify motion photos, panoramas (aka photo spheres), 360° videos, as well as GeoTIFF files. +ಏವೀಸ್ ನಿಮ್ಮ JPEG ಗಳು ಮತ್ತು MP4 ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ಎಲ್ಲಾ ರೀತಿಯ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ನಿಭಾಯಿಸಬಲ್ಲದು, ಅಲ್ಲದೆ ವಿಶಿಷ್ಟವಾದ ಬಹು-ಪುಟ TIFFಗಳು, SVGಗಳು, ಹಳೆಯ AVIಗಳು ಮತ್ತು ಹಲವು ಪ್ರಕಾರಗಳನ್ನು ಕೂಡ ಬೆಂಬಲಿಸುತ್ತದೆ ಇದು ಚಲನೆಯ ಫೋಟೋಗಳು, ಪನೋರಮಾಗಳು (ಫೋಟೋ ಗೋಳಗಳು) 360° ವೀಡಿಯೊಗಳು, ಹಾಗೆಯೇ GeoTIFF ಕಡತಗಳನ್ನು ಗುರುತಿಸಲು ನಿಮ್ಮ ಮಾಧ್ಯಮ ಸಂಗ್ರಹವನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡುತ್ತದೆ. -Navigation and search is an important part of Aves. The goal is for users to easily flow from albums to photos to tags to maps, etc. +ನ್ಯಾವಿಗೇಷನ್ ಮತ್ತು ಹುಡುಕಾಟ ಏವೀಸ್ನ ಒಂದು ಪ್ರಮುಖ ಭಾಗವಾಗಿದೆ. ಬಳಕೆದಾರರು ಆಲ್ಬಮ್‌ಗಳಿಂದ ಫೋಟೋಗಳಿಂದ ಟ್ಯಾಗ್‌ಗಳಿಗೆ ನಕ್ಷೆಗಳಿಗೆ ಸುಲಭವಾಗಿ ಹರಿಯುವುದು ಗುರಿಯಾಗಿದೆ. -Aves integrates with Android (including Android TV) with features such as widgets, app shortcuts, screen saver and global search handling. It also works as a media viewer and picker. +ಎವೀಸ್ ಆಂಡ್ರಾಯ್ಡ್ (ಟಿವಿ ಸೇರಿದಂತೆ) ನೊಂದಿಗೆ ಸಂಯೋಜಿಸುತ್ತದೆ, ಉದಾಹರಣೆಗೆ ವಿಜೆಟ್‌ಗಳು, ಆ್ಯಪ್ ಶಾರ್ಟ್‌ಕಟ್‌ಗಳು, ಸ್ಕ್ರೀನ್ ಸೇವರ್ ಮತ್ತು ಜಾಗತಿಕ ಹುಡುಕಾಟ ನಿರ್ವಹಣೆ. ಇದು ಮೀಡಿಯಾ ವೀಕ್ಷಕ ಮತ್ತು ಪಿಕ್ಕರ್ ಆಗಿಯೂ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. diff --git a/fastlane/metadata/android/kn/images/featureGraphic.png b/fastlane/metadata/android/kn/images/featureGraphic.png new file mode 100644 index 000000000..d6714f206 Binary files /dev/null and b/fastlane/metadata/android/kn/images/featureGraphic.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/1.png b/fastlane/metadata/android/kn/images/phoneScreenshots/1.png new file mode 100644 index 000000000..a12312ad5 Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/1.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/2.png b/fastlane/metadata/android/kn/images/phoneScreenshots/2.png new file mode 100644 index 000000000..cccbd6003 Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/2.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/3.png b/fastlane/metadata/android/kn/images/phoneScreenshots/3.png new file mode 100644 index 000000000..0e0c38f43 Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/3.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/4.png b/fastlane/metadata/android/kn/images/phoneScreenshots/4.png new file mode 100644 index 000000000..ac11ae18a Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/4.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/5.png b/fastlane/metadata/android/kn/images/phoneScreenshots/5.png new file mode 100644 index 000000000..757313fcf Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/5.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/6.png b/fastlane/metadata/android/kn/images/phoneScreenshots/6.png new file mode 100644 index 000000000..c11d4dd62 Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/6.png differ diff --git a/fastlane/metadata/android/kn/images/phoneScreenshots/7.png b/fastlane/metadata/android/kn/images/phoneScreenshots/7.png new file mode 100644 index 000000000..639e15a2e Binary files /dev/null and b/fastlane/metadata/android/kn/images/phoneScreenshots/7.png differ diff --git a/fastlane/metadata/android/kn/short_description.txt b/fastlane/metadata/android/kn/short_description.txt index 8c9445bd5..c32edfc15 100644 --- a/fastlane/metadata/android/kn/short_description.txt +++ b/fastlane/metadata/android/kn/short_description.txt @@ -1 +1 @@ -Gallery and metadata explorer \ No newline at end of file +ಗ್ಯಾಲರಿ ಮತ್ತು ಮೆಟಾಡೇಟಾ ಎಕ್ಸ್‌ಪ್ಲೋರರ್ \ No newline at end of file diff --git a/lib/image_providers/uri_image_provider.dart b/lib/image_providers/full_image_provider.dart similarity index 87% rename from lib/image_providers/uri_image_provider.dart rename to lib/image_providers/full_image_provider.dart index e7ae98af9..782ac9180 100644 --- a/lib/image_providers/uri_image_provider.dart +++ b/lib/image_providers/full_image_provider.dart @@ -10,7 +10,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/widgets.dart'; @immutable -class UriImage extends ImageProvider with EquatableMixin { +class FullImage extends ImageProvider with EquatableMixin { final String uri, mimeType; final int? pageId, rotationDegrees, sizeBytes; final bool isFlipped, isAnimated; @@ -19,7 +19,7 @@ class UriImage extends ImageProvider with EquatableMixin { @override List get props => [uri, pageId, rotationDegrees, isFlipped, isAnimated, scale]; - const UriImage({ + const FullImage({ required this.uri, required this.mimeType, required this.pageId, @@ -31,12 +31,12 @@ class UriImage extends ImageProvider with EquatableMixin { }); @override - Future obtainKey(ImageConfiguration configuration) { - return SynchronousFuture(this); + Future obtainKey(ImageConfiguration configuration) { + return SynchronousFuture(this); } @override - ImageStreamCompleter loadImage(UriImage key, ImageDecoderCallback decode) { + ImageStreamCompleter loadImage(FullImage key, ImageDecoderCallback decode) { final chunkEvents = StreamController(); return MultiFrameImageStreamCompleter( @@ -59,11 +59,11 @@ class UriImage extends ImageProvider with EquatableMixin { case MimeTypes.svg: return false; default: - return !isAnimated; + return !isAnimated && !MimeTypes.isVideo(mimeType); } } - Future _loadAsync(UriImage key, ImageDecoderCallback decode, StreamController chunkEvents) async { + Future _loadAsync(FullImage key, ImageDecoderCallback decode, StreamController chunkEvents) async { assert(key == this); final request = ImageRequest( diff --git a/lib/l10n/app_da.arb b/lib/l10n/app_da.arb index f86985a3c..d7d7d2a19 100644 --- a/lib/l10n/app_da.arb +++ b/lib/l10n/app_da.arb @@ -1552,5 +1552,87 @@ "settingsViewerQuickActionEmpty": "Ingen knapper", "@settingsViewerQuickActionEmpty": {}, "chipActionFilterOut": "Filtrer ud", - "@chipActionFilterOut": {} + "@chipActionFilterOut": {}, + "mapStyleOsmHot": "Humanitært OSM", + "@mapStyleOsmHot": {}, + "collectionDeselectSectionTooltip": "Fravælg sektion", + "@collectionDeselectSectionTooltip": {}, + "editEntryLocationDialogImportGpx": "Importér GPX", + "@editEntryLocationDialogImportGpx": {}, + "editEntryLocationDialogTimeShift": "Tidsskift", + "@editEntryLocationDialogTimeShift": {}, + "videoStreamSelectionDialogTrack": "Spor", + "@videoStreamSelectionDialogTrack": {}, + "albumGroupTier": "Efter kategori", + "@albumGroupTier": {}, + "settingsVideoEnableHardwareAcceleration": "Hardwareacceleration", + "@settingsVideoEnableHardwareAcceleration": {}, + "settingsViewerSectionTitle": "Fremviser", + "@settingsViewerSectionTitle": {}, + "openMapPageTooltip": "Se på kortside", + "@openMapPageTooltip": {}, + "settingsCollectionBurstPatternsTile": "Filnavnmønstre", + "@settingsCollectionBurstPatternsTile": {}, + "wallpaperUseScrollEffect": "Brug rulleeffekt på startside", + "@wallpaperUseScrollEffect": {}, + "editEntryDateDialogSourceFileModifiedDate": "Filens ændringsdato", + "@editEntryDateDialogSourceFileModifiedDate": {}, + "editEntryDateDialogShift": "Skift", + "@editEntryDateDialogShift": {}, + "chipActionDecompose": "Split", + "@chipActionDecompose": {}, + "coordinateFormatDdm": "DDM", + "@coordinateFormatDdm": {}, + "videoActionShowNextFrame": "Vis næste frame", + "@videoActionShowNextFrame": {}, + "mapStyleStamenWatercolor": "Stamen Watercolor", + "@mapStyleStamenWatercolor": {}, + "drawerCollectionAll": "Alle samlinger", + "@drawerCollectionAll": {}, + "settingsThumbnailShowVideoDuration": "Vis videovarighed", + "@settingsThumbnailShowVideoDuration": {}, + "settingsThemeColorHighlights": "Farvemarkeringer", + "@settingsThemeColorHighlights": {}, + "viewerInfoSearchEmpty": "Ingen matchende nøgler", + "@viewerInfoSearchEmpty": {}, + "removeEntryMetadataDialogAll": "Alle", + "@removeEntryMetadataDialogAll": {}, + "aboutCreditsSectionTitle": "Kreditering", + "@aboutCreditsSectionTitle": {}, + "settingsCollectionQuickActionTabSelecting": "Valg", + "@settingsCollectionQuickActionTabSelecting": {}, + "settingsCollectionQuickActionTabBrowsing": "Browsing", + "@settingsCollectionQuickActionTabBrowsing": {}, + "settingsViewerQuickActionEditorBanner": "Tryk og hold for at flytte knapper og vælge, hvilke handlinger der vises i fremviseren.", + "@settingsViewerQuickActionEditorBanner": {}, + "settingsAllowInstalledAppAccess": "Tillad adgang til app-lager", + "@settingsAllowInstalledAppAccess": {}, + "viewerInfoBackToViewerTooltip": "Tilbage til fremviser", + "@viewerInfoBackToViewerTooltip": {}, + "videoActionShowPreviousFrame": "Vis forrige frame", + "@videoActionShowPreviousFrame": {}, + "collectionSelectSectionTooltip": "Vælg sektion", + "@collectionSelectSectionTooltip": {}, + "videoStreamSelectionDialogNoSelection": "Der er ingen andre spor.", + "@videoStreamSelectionDialogNoSelection": {}, + "addShortcutDialogLabel": "Genvejsetiket", + "@addShortcutDialogLabel": {}, + "moveUndatedConfirmationDialogMessage": "Gem elementdatoer, før du fortsætter?", + "@moveUndatedConfirmationDialogMessage": {}, + "albumMimeTypeMixed": "Blandet", + "@albumMimeTypeMixed": {}, + "videoActionCaptureFrame": "Tag billede af frame", + "@videoActionCaptureFrame": {}, + "videoActionSelectStreams": "Vælg spor", + "@videoActionSelectStreams": {}, + "videoActionABRepeat": "A-B gentagelse", + "@videoActionABRepeat": {}, + "viewerActionLock": "Lås fremviser", + "@viewerActionLock": {}, + "viewerActionUnlock": "Oplås fremviser", + "@viewerActionUnlock": {}, + "keepScreenOnViewerOnly": "Kun fremvisningsside", + "@keepScreenOnViewerOnly": {}, + "widgetOpenPageViewer": "Åbn fremviser", + "@widgetOpenPageViewer": {} } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 4cad066f7..ac7fe39f4 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -1410,5 +1410,9 @@ "chipActionDecompose": "Aufschlüsseln", "@chipActionDecompose": {}, "editEntryLocationDialogImportGpx": "GPX importieren", - "@editEntryLocationDialogImportGpx": {} + "@editEntryLocationDialogImportGpx": {}, + "editEntryLocationDialogTimeShift": "Zeitverschiebung", + "@editEntryLocationDialogTimeShift": {}, + "removeEntryMetadataDialogAll": "Alle", + "@removeEntryMetadataDialogAll": {} } diff --git a/lib/l10n/app_kn.arb b/lib/l10n/app_kn.arb index feef36e0b..31b07b026 100644 --- a/lib/l10n/app_kn.arb +++ b/lib/l10n/app_kn.arb @@ -1,5 +1,5 @@ { - "appName": "Aves", + "appName": "ಎವೀಸ್", "@appName": {}, "welcomeOptional": "ಐಚ್ಛಿಕ", "@welcomeOptional": {}, @@ -13,7 +13,7 @@ "@nextButtonLabel": {}, "showButtonLabel": "ತೋರಿಸು", "@showButtonLabel": {}, - "hideButtonLabel": "ಮುಚ್ಚಿಡು", + "hideButtonLabel": "ಅಡಗಿಸು", "@hideButtonLabel": {}, "continueButtonLabel": "ಮುಂದುವರಿಸು", "@continueButtonLabel": {}, @@ -23,9 +23,9 @@ "@applyTooltip": {}, "cancelTooltip": "ರದ್ದುಗೊಳಿಸಿ", "@cancelTooltip": {}, - "changeTooltip": "ಬದಲಾಯಿಸು", + "changeTooltip": "ಬದಲಿಸು", "@changeTooltip": {}, - "clearTooltip": "ಸ್ಪಷ್ಟ ಮಾಡು", + "clearTooltip": "ಖಾಲಿ ಮಾಡು", "@clearTooltip": {}, "previousTooltip": "ಹಿಂದಿನ", "@previousTooltip": {}, @@ -41,7 +41,7 @@ "@saveTooltip": {}, "pickTooltip": "ಆಯ್ಕೆ", "@pickTooltip": {}, - "doubleBackExitMessage": "ನಿರ್ಗಮಿಸಲು ಮತ್ತೆ \"ಹಿಂದೆ\" ಟ್ಯಾಪ್ ಮಾಡಿ.", + "doubleBackExitMessage": "ನಿರ್ಗಮಿಸಲು ಮತ್ತೊಮ್ಮೆ “ಹಿಂದೆ” ಒತ್ತಿ.", "@doubleBackExitMessage": {}, "doNotAskAgain": "ಇನ್ನೊಮ್ಮೆ ಕೇಳಬೇಡಿ", "@doNotAskAgain": {}, @@ -59,6 +59,1580 @@ "@chipActionGoToAlbumPage": {}, "hideTooltip": "ಮರೆಮಾಡಿ", "@hideTooltip": {}, - "welcomeMessage": "Aves ಗೆ ಸ್ವಾಗತ", - "@welcomeMessage": {} + "welcomeMessage": "ಎವೀಸ್ ಗೆ ಸ್ವಾಗತ", + "@welcomeMessage": {}, + "columnCount": "{count, plural, =1{{count} ಕಂಬಸಾಲು} other{{count} ಕಂಬಸಾಲುಗಳು}}", + "@columnCount": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "itemCount": "{count, plural, =1{{count} ವಸ್ತು} other{{count} ವಸ್ತುಗಳು}}", + "@itemCount": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "chipActionShowCollection": "ಸಂಗ್ರಹದಲ್ಲಿ ತೋರಿಸು", + "@chipActionShowCollection": {}, + "videoActionSetSpeed": "ಚಲನೆಯ ವೇಗ", + "@videoActionSetSpeed": {}, + "viewerActionUnlock": "ನೋಟವನ್ನು ಬಿಡುಗಡೆಗೊಳಿಸಿ", + "@viewerActionUnlock": {}, + "editorActionTransform": "ರೂಪಾಂತರ", + "@editorActionTransform": {}, + "editorTransformCrop": "ಕತ್ತರಿಸು", + "@editorTransformCrop": {}, + "chipActionUnpin": "ಪಿನ್ ತೆಗೆಯಿರಿ", + "@chipActionUnpin": {}, + "chipActionDecompose": "ವಿಭಜಿಸು", + "@chipActionDecompose": {}, + "chipActionFilterIn": "ಶೋಧಿಸು", + "@chipActionFilterIn": {}, + "chipActionHide": "ಅಡಗಿಸು", + "@chipActionHide": {}, + "chipActionLock": "ಬಂಧಿಸು", + "@chipActionLock": {}, + "chipActionPin": "ಮೇಲೆ ಸಿಕ್ಕಿಸು", + "@chipActionPin": {}, + "entryActionShareVideoOnly": "ವಿಡಿಯೋವನ್ನು ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ", + "@entryActionShareVideoOnly": {}, + "entryActionViewSource": "ಮೂಲವನ್ನು ನೋಡಿ", + "@entryActionViewSource": {}, + "entryActionConvertMotionPhotoToStillImage": "ಸ್ಥಿರ ಚಿತ್ರವಾಗಿ ಮಾರ್ಪಡಿಸಿ", + "@entryActionConvertMotionPhotoToStillImage": {}, + "entryActionViewMotionPhotoVideo": "ವಿಡಿಯೋ ತೆರೆಯಿರಿ", + "@entryActionViewMotionPhotoVideo": {}, + "entryActionOpen": "..ಇಂದ ತೆರೆಯಿರಿ", + "@entryActionOpen": {}, + "entryActionSetAs": "ಇದಾಗಿ ಸೆಟ್ ಮಾಡಿ", + "@entryActionSetAs": {}, + "entryActionCast": "ಕ್ಯಾಸ್ಟ್", + "@entryActionCast": {}, + "entryActionOpenMap": "ನಕ್ಷೆಯ ಆಪ್ ನಲ್ಲಿ ತೋರಿಸಿ", + "@entryActionOpenMap": {}, + "entryActionRotateScreen": "ಪರದೆಯನ್ನು ತಿರುಗಿಸಿ", + "@entryActionRotateScreen": {}, + "entryActionAddFavourite": "ನೆಚ್ಚಿನದಕ್ಕೆ ಸೇರಿಸಿ", + "@entryActionAddFavourite": {}, + "entryActionRemoveFavourite": "ನೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆಯಿರಿ", + "@entryActionRemoveFavourite": {}, + "videoActionShowNextFrame": "ಮುಂದಿನ ಫ್ರೇಮ್ ತೋರಿಸಿ", + "@videoActionShowNextFrame": {}, + "videoActionReplay10": "೧೦ ಕ್ಷಣ ಹಿಂದೆ ಓಡಿಸಿ", + "@videoActionReplay10": {}, + "videoActionSelectStreams": "ಟ್ರ್ಯಾಕ್ ಆರಿಸಿ", + "@videoActionSelectStreams": {}, + "videoActionABRepeat": "A-B ಪುನರಾವರ್ತನೆ", + "@videoActionABRepeat": {}, + "entryInfoActionEditTags": "Tagಗಳನ್ನು ತಿದ್ದಿ", + "@entryInfoActionEditTags": {}, + "entryInfoActionRemoveMetadata": "metadata ತೆಗೆಯಿರಿ", + "@entryInfoActionRemoveMetadata": {}, + "entryInfoActionExportMetadata": "metadata ರಪ್ತು ಮಾಡಿ", + "@entryInfoActionExportMetadata": {}, + "entryInfoActionRemoveLocation": "ಸ್ಥಳದ ವಿವರಗಳನ್ನು ತೆಗೆಯಿರಿ", + "@entryInfoActionRemoveLocation": {}, + "focalLength": "{length} ಮಿಮಿ", + "@focalLength": { + "placeholders": { + "length": { + "type": "String", + "example": "5.4" + } + } + }, + "chipActionRemove": "ತೆಗೆದುಹಾಕು", + "@chipActionRemove": {}, + "chipActionGoToCountryPage": "ದೇಶಗಳಲ್ಲಿ ತೋರಿಸು", + "@chipActionGoToCountryPage": {}, + "chipActionGoToPlacePage": "ಸ್ಥಳಗಳಲ್ಲಿ ತೋರಿಸು", + "@chipActionGoToPlacePage": {}, + "chipActionGoToTagPage": "Tagಗಳಲ್ಲಿ ತೋರಿಸು", + "@chipActionGoToTagPage": {}, + "chipActionFilterOut": "ಪ್ರತ್ಯೇಕಿಸು", + "@chipActionFilterOut": {}, + "videoActionShowPreviousFrame": "ಹಿಂದಿನ ಫ್ರೇಮ್ ತೋರಿಸಿ", + "@videoActionShowPreviousFrame": {}, + "timeMinutes": "{count, plural, =1{{count} ನಿಮಿಷ} other{{count} ನಿಮಿಷಗಳು}}", + "@timeMinutes": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "timeDays": "{count, plural, =1{{count} ದಿನ} other{{count} ದಿನಗಳು}}", + "@timeDays": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "editorTransformRotate": "ತಿರುಗಿಸು", + "@editorTransformRotate": {}, + "stopTooltip": "ನಿಲ್ಲಿಸು", + "@stopTooltip": {}, + "chipActionRename": "ಮರುನಾಮಕರಣ", + "@chipActionRename": {}, + "chipActionSetCover": "ರಕ್ಷಾಕವಚ ಹೊಂದಿಸು", + "@chipActionSetCover": {}, + "chipActionGoToExplorerPage": "ಪರಿಶೋಧಕದಲ್ಲಿ ತೋರಿಸು", + "@chipActionGoToExplorerPage": {}, + "chipActionShowCountryStates": "ಅಂಕಿಅಂಶಗಳನ್ನು ತೋರಿಸಿ", + "@chipActionShowCountryStates": {}, + "entryActionPrint": "ಮುದ್ರಿಸು", + "@entryActionPrint": {}, + "entryActionShare": "ಹಂಚಿಕೊಳ್ಳಿ", + "@entryActionShare": {}, + "entryActionShareImageOnly": "ಚಿತ್ರವನ್ನು ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ", + "@entryActionShareImageOnly": {}, + "entryActionShowGeoTiffOnMap": "ನಕ್ಷೆಯ ಮೇಲ್ಪದರದಲ್ಲಿ ತೋರಿಸಿ", + "@entryActionShowGeoTiffOnMap": {}, + "entryActionEdit": "ಸಂಪಾದಿಸಿ", + "@entryActionEdit": {}, + "videoActionCaptureFrame": "ಫ್ರೇಮ್ ಸೆರೆಹಿಡಿಯಿರಿ", + "@videoActionCaptureFrame": {}, + "videoActionPlay": "ಪ್ಲೇ ಮಾಡಿ", + "@videoActionPlay": {}, + "videoActionUnmute": "ಸದ್ದಾಗಿಸಿ", + "@videoActionUnmute": {}, + "videoActionMute": "ಸದ್ದಡಗಿಸಿ", + "@videoActionMute": {}, + "videoActionPause": "ತಾಳು", + "@videoActionPause": {}, + "entryInfoActionEditTitleDescription": "ಶೀರ್ಷಿಕೆ ಮತ್ತು ವಿವರಣೆಯನ್ನು ತಿದ್ದಿ", + "@entryInfoActionEditTitleDescription": {}, + "videoRepeatActionSetStart": "ಪ್ರಾರಂಭವನ್ನು ಹೊಂದಿಸಿ", + "@videoRepeatActionSetStart": {}, + "entryInfoActionEditRating": "ಮೌಲ್ಯವನ್ನು ತಿದ್ದಿ", + "@entryInfoActionEditRating": {}, + "slideshowActionResume": "ಪುನರಾರಂಭಿಸಿ", + "@slideshowActionResume": {}, + "slideshowActionShowInCollection": "ಸಂಗ್ರಹದಲ್ಲಿ ತೋರಿಸಿ", + "@slideshowActionShowInCollection": {}, + "videoRepeatActionSetEnd": "ಅಂತ್ಯವನ್ನು ಹೊಂದಿಸಿ", + "@videoRepeatActionSetEnd": {}, + "viewerActionSettings": "ಸಂಯೋಜನೆಗಳು", + "@viewerActionSettings": {}, + "viewerActionLock": "ನೋಟವನ್ನು ಬಂಧಿಸಿ", + "@viewerActionLock": {}, + "entryInfoActionEditDate": "ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ತಿದ್ದಿ", + "@entryInfoActionEditDate": {}, + "entryInfoActionEditLocation": "ಸ್ಥಳವನ್ನು ತಿದ್ದಿ", + "@entryInfoActionEditLocation": {}, + "cropAspectRatioFree": "ಉಚಿತ", + "@cropAspectRatioFree": {}, + "cropAspectRatioOriginal": "ಮೂಲ", + "@cropAspectRatioOriginal": {}, + "cropAspectRatioSquare": "ಚೌಕ", + "@cropAspectRatioSquare": {}, + "filterAspectRatioLandscapeLabel": "ಭೂದೃಶ್ಯ", + "@filterAspectRatioLandscapeLabel": {}, + "filterAspectRatioPortraitLabel": "ಭಾವಚಿತ್ರ", + "@filterAspectRatioPortraitLabel": {}, + "filterBinLabel": "ಮರುಬಳಕೆ ತೊಟ್ಟಿ", + "@filterBinLabel": {}, + "filterFavouriteLabel": "ಅಚ್ಚುಮೆಚ್ಚು", + "@filterFavouriteLabel": {}, + "filterNoDateLabel": "ದಿನಾಂಕವಿಲ್ಲ", + "@filterNoDateLabel": {}, + "filterNoAddressLabel": "ವಿಳಾಸವಿಲ್ಲ", + "@filterNoAddressLabel": {}, + "filterLocatedLabel": "ನೆಲೆಗೊಳಿಸಿದ್ದು", + "@filterLocatedLabel": {}, + "filterNoLocationLabel": "ನೆಲೆ ಇಲ್ಲದ್ದು", + "@filterNoLocationLabel": {}, + "filterTaggedLabel": "ಮೌಲ್ಯ ಸಹಿತ", + "@filterTaggedLabel": {}, + "filterNoRatingLabel": "ಮೌಲ್ಯ ರಹಿತ", + "@filterNoRatingLabel": {}, + "filterNoTagLabel": "ಮೌಲ್ಯವಿಲ್ಲದ್ದು", + "@filterNoTagLabel": {}, + "filterOnThisDayLabel": "ಈ ದಿನದಂದು", + "@filterOnThisDayLabel": {}, + "filterNoTitleLabel": "ಶೀರ್ಷಿಕೆ ರಹಿತ", + "@filterNoTitleLabel": {}, + "videoActionSkip10": "೧೦ ಕ್ಷಣ ಮುಂದೆ ಓಡಿಸಿ", + "@videoActionSkip10": {}, + "timeSeconds": "{count, plural, =1{{count} ಕ್ಷಣ} other{{count} ಕ್ಷಣಗಳು}}", + "@timeSeconds": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "keepScreenOnNever": "ಎಂದಿಗೂ ಇಲ್ಲ", + "@keepScreenOnNever": {}, + "restrictedAccessDialogMessage": "{directory} ನ “{volume}”ನಲ್ಲಿರುವ ಕಡತಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸಲಾಗಿಲ್ಲ.\n\nದಯವಿಟ್ಟು ವಸ್ತುಗಳನ್ನು ಮತ್ತೊಂದು ಕೋಶಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಲು ಮೊದಲೇ ಸ್ಥಾಪಿಸಲಾದ ಕಡತ ನಿರ್ವಾಹಕ ಅಥವಾ ಗ್ಯಾಲರಿ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಿ.", + "@restrictedAccessDialogMessage": { + "placeholders": { + "directory": { + "type": "String", + "description": "the name of a directory, using the output of `rootDirectoryDescription` or `otherDirectoryDescription`" + }, + "volume": { + "type": "String", + "example": "SD card", + "description": "the name of a storage volume" + } + } + }, + "coordinateFormatDdm": "DDM", + "@coordinateFormatDdm": {}, + "mapStyleGoogleNormal": "ಗೂಗಲ್ ನಕಾಶೆಗಳು", + "@mapStyleGoogleNormal": {}, + "storageAccessDialogMessage": "ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡಲು ಮುಂದಿನ ಪರದೆಯಲ್ಲಿ “{volume}” ದ {directory} ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.", + "@storageAccessDialogMessage": { + "placeholders": { + "directory": { + "type": "String", + "description": "the name of a directory, using the output of `rootDirectoryDescription` or `otherDirectoryDescription`" + }, + "volume": { + "type": "String", + "example": "SD card", + "description": "the name of a storage volume" + } + } + }, + "viewerTransitionZoomIn": "ಹಿಗ್ಗಿಸು", + "@viewerTransitionZoomIn": {}, + "widgetOpenPageViewer": "ವೀಕ್ಷಕವನ್ನು ತೆರೆಯಿರಿ", + "@widgetOpenPageViewer": {}, + "otherDirectoryDescription": "“{name}” ಕೋಶ", + "@otherDirectoryDescription": { + "placeholders": { + "name": { + "type": "String", + "example": "Pictures", + "description": "the name of a specific directory" + } + } + }, + "authenticateToConfigureVault": "ನೆಲಮಾಳಿಗೆಯನ್ನು ಸಂರಚಿಸಲು ಧೃಡೀಕರಿಸಿ", + "@authenticateToConfigureVault": {}, + "newVaultWarningDialogMessage": "ನೆಲಮಾಳಿಗೆಯಲ್ಲಿನ ವಸ್ತುಗಳು ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಮಾತ್ರ ಲಭ್ಯವಿದೆ ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಇರುವುದಿಲ್ಲ.\n\nನೀವು ಈ ಅಪ್ಲಿಕೇಶನ್ ನನ್ನು ಅಸ್ಥಾಪಿಸಿದರೆ ಅಥವಾ ಈ ಅಪ್ಲಿಕೇಶನ್ ದತ್ತಾಂಶಗಳನ್ನು ತೆರವುಗೊಳಿಸಿದರೆ, ನೀವು ಈ ಎಲ್ಲ ವಸ್ತುಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ.", + "@newVaultWarningDialogMessage": {}, + "passwordDialogEnter": "ಕೀಲಿಪದ ನಮೂದಿಸಿ", + "@passwordDialogEnter": {}, + "configureVaultDialogTitle": "ನೆಲಮಾಳಿಗೆಯನ್ನು ಸಂರಚಿಸಿ", + "@configureVaultDialogTitle": {}, + "editEntryDialogTargetFieldsHeader": "ಮಾರ್ಪಡಿಸುವ ಕ್ಷೇತ್ರಗಳು", + "@editEntryDialogTargetFieldsHeader": {}, + "patternDialogEnter": "ಪ್ಯಾಟರ್ನ್ ನಮೂದಿಸಿ", + "@patternDialogEnter": {}, + "patternDialogConfirm": "ಪ್ಯಾಟರ್ನ್ ಖಚಿತಪಡಿಸಿ", + "@patternDialogConfirm": {}, + "renameEntryDialogLabel": "ಹೊಸ ಹೆಸರು", + "@renameEntryDialogLabel": {}, + "exportEntryDialogWriteMetadata": "ಮೆಟಾಡೇಟಾ ಬರೆಯಿರಿ", + "@exportEntryDialogWriteMetadata": {}, + "renameAlbumDialogLabel": "ಹೊಸ ಹೆಸರು", + "@renameAlbumDialogLabel": {}, + "deleteSingleAlbumConfirmationDialogMessage": "{count, plural, =1{ಈ ಆಲ್ಬಮ್ ಮತ್ತು ಅದರಲ್ಲಿರುವ ವಸ್ತುವನ್ನು ಅಳಿಸುವುದೇ?} other{ಈ ಆಲ್ಬಮ್ ಮತ್ತು ಅದರಲ್ಲಿರುವ {count} ವಸ್ತುಗಳನ್ನು ಅಳಿಸುವುದೇ?}}", + "@deleteSingleAlbumConfirmationDialogMessage": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "deleteMultiAlbumConfirmationDialogMessage": "{count, plural, =1{ಈ ಆಲ್ಬಮ್ ಗಳನ್ನು ಮತ್ತು ಅದರಲ್ಲಿರುವ ವಸ್ತುವನ್ನು ಅಳಿಸುವುದೇ?} other{ಈ ಆಲ್ಬಮ್ ಗಳನ್ನು ಮತ್ತು ಅದರಲ್ಲಿರುವ {count} ವಸ್ತುಗಳನ್ನು ಅಳಿಸುವುದೇ?}}", + "@deleteMultiAlbumConfirmationDialogMessage": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "exportEntryDialogFormat": "ಸ್ವರೂಪ:", + "@exportEntryDialogFormat": {}, + "pinDialogEnter": "PIN ನಮೂದಿಸಿ", + "@pinDialogEnter": {}, + "renameProcessorName": "ಹೆಸರು", + "@renameProcessorName": {}, + "editEntryDateDialogTitle": "ದಿನಾಂಕ ಮತ್ತು ಸಮಯ", + "@editEntryDateDialogTitle": {}, + "subtitlePositionTop": "ಮೇಲ್ತುದಿ", + "@subtitlePositionTop": {}, + "widgetTapUpdateWidget": "ವಿಜೆಟ್ ನವೀಕರಿಸಿ", + "@widgetTapUpdateWidget": {}, + "rootDirectoryDescription": "ಮೂಲ ಕೋಶ", + "@rootDirectoryDescription": {}, + "mapStyleOpenTopoMap": "ಓಪನ್ ಟೊಪೊ ಮ್ಯಾಪ್", + "@mapStyleOpenTopoMap": {}, + "mapStyleOsmHot": "ಮಾನವೀಯ OSM", + "@mapStyleOsmHot": {}, + "maxBrightnessAlways": "ಯಾವಾಗಲೂ", + "@maxBrightnessAlways": {}, + "vaultLockTypePin": "ಪಿನ್", + "@vaultLockTypePin": {}, + "videoLoopModeNever": "ಇಂದಿಗೂ ಇಲ್ಲ", + "@videoLoopModeNever": {}, + "videoLoopModeShortOnly": "ಚಿಕ್ಕ ವಿಡಿಯೋಗಳನ್ನು ಮಾತ್ರ", + "@videoLoopModeShortOnly": {}, + "videoLoopModeAlways": "ಯಾವಾಗಲೂ", + "@videoLoopModeAlways": {}, + "videoPlaybackMuted": "ಶಬ್ದರಹಿತವಾಗಿ ಪ್ಲೇ ಮಾಡಿ", + "@videoPlaybackMuted": {}, + "videoPlaybackWithSound": "ಶಬ್ದಸಹಿತವಾಗಿ ಪ್ಲೇ ಮಾಡಿ", + "@videoPlaybackWithSound": {}, + "videoResumptionModeNever": "ಎಂದಿಗೂ ಇಲ್ಲ", + "@videoResumptionModeNever": {}, + "wallpaperTargetLock": "ಲಾಕ್ ಪರದೆ", + "@wallpaperTargetLock": {}, + "wallpaperTargetHomeLock": "ಮುಖ ಮತ್ತು ಲಾಕ್ ಪರದೆ", + "@wallpaperTargetHomeLock": {}, + "widgetDisplayedItemRandom": "ಇಷ್ಟಬಂದಂತೆ", + "@widgetDisplayedItemRandom": {}, + "moveUndatedConfirmationDialogMessage": "ಮುಂದುವರಿಯುವ ಮೊದಲು ವಸ್ತುವಿನ ದಿನಾಂಕಗಳನ್ನು ಉಳಿಸುವುದೇ?", + "@moveUndatedConfirmationDialogMessage": {}, + "moveUndatedConfirmationDialogSetDate": "ದಿನಾಂಕಗಳನ್ನು ಉಳಿಸಿ", + "@moveUndatedConfirmationDialogSetDate": {}, + "vaultDialogLockModeWhenScreenOff": "ಪರದೆ ಬಂದಾದಾಗ ಲಾಕ್ ಮಾಡಿ", + "@vaultDialogLockModeWhenScreenOff": {}, + "authenticateToUnlockVault": "ನೆಲಮಾಳಿಗೆಯ ಲಾಕ್ ತೆಗೆಯಲು ಧೃಡೀಕರಿಸಿ", + "@authenticateToUnlockVault": {}, + "vaultBinUsageDialogMessage": "ಕೆಲವು ನೆಲಮಾಳಿಗೆಗಳು ಮರುಬಳಕೆ ತೊಟ್ಟಿಯನ್ನು ಬಳಸುತ್ತಿವೆ.", + "@vaultBinUsageDialogMessage": {}, + "coordinateFormatDms": "DMS", + "@coordinateFormatDms": {}, + "renameEntrySetPagePatternFieldLabel": "ಹೆಸರಿಸುವ ಮಾದರಿ", + "@renameEntrySetPagePatternFieldLabel": {}, + "renameProcessorCounter": "ಗಣಕ", + "@renameProcessorCounter": {}, + "renameProcessorHash": "ಹ್ಯಾಷ್", + "@renameProcessorHash": {}, + "exportEntryDialogHeight": "ಎತ್ತರ", + "@exportEntryDialogHeight": {}, + "exportEntryDialogQuality": "ಗುಣಮಟ್ಟ", + "@exportEntryDialogQuality": {}, + "overlayHistogramNone": "ಏನಿಲ್ಲ", + "@overlayHistogramNone": {}, + "overlayHistogramRGB": "RGB", + "@overlayHistogramRGB": {}, + "setCoverDialogAuto": "ಸ್ವಯಂಚಾಲಿತ", + "@setCoverDialogAuto": {}, + "coordinateDmsEast": "ಪೂ", + "@coordinateDmsEast": {}, + "albumTierVaults": "ನೆಲಮಾಳಿಗೆಗಳು", + "@albumTierVaults": {}, + "albumTierDynamic": "ಕ್ರಿಯಾಶೀಲ", + "@albumTierDynamic": {}, + "albumTierRegular": "ಇತರೆ", + "@albumTierRegular": {}, + "coordinateFormatDecimal": "ದಶಮಾಂಶ ಡಿಗ್ರಿಗಳು", + "@coordinateFormatDecimal": {}, + "lengthUnitPercent": "%", + "@lengthUnitPercent": {}, + "keepScreenOnVideoPlayback": "ವಿಡಿಯೋ ಚಲನೆಯಲ್ಲಿರುವಾಗ", + "@keepScreenOnVideoPlayback": {}, + "mapStyleGoogleTerrain": "ಗೂಗಲ್ ನಕಾಶೆಗಳು (ಭೂ ಪ್ರದೇಶ)", + "@mapStyleGoogleTerrain": {}, + "mapStyleStamenWatercolor": "Stamen ಜಲವರ್ಣ", + "@mapStyleStamenWatercolor": {}, + "themeBrightnessLight": "ತಿಳಿ ಬಣ್ಣ", + "@themeBrightnessLight": {}, + "themeBrightnessBlack": "ಕಡುಕಪ್ಪು", + "@themeBrightnessBlack": {}, + "unitSystemImperial": "ಇಂಪೀರಿಯಲ್", + "@unitSystemImperial": {}, + "vaultLockTypePattern": "ಪ್ಯಾಟರ್ನ್", + "@vaultLockTypePattern": {}, + "viewerTransitionSlide": "ಜಾರಿಸು", + "@viewerTransitionSlide": {}, + "viewerTransitionParallax": "ಪ್ಯಾರಾಲಾಕ್ಸ್", + "@viewerTransitionParallax": {}, + "videoPlaybackSkip": "ಬಿಟ್ಟುಬಿಡು", + "@videoPlaybackSkip": {}, + "storageVolumeDescriptionFallbackPrimary": "ಆಂತರಿಕ ಸಂಗ್ರಹಣೆ", + "@storageVolumeDescriptionFallbackPrimary": {}, + "dynamicAlbumAlreadyExists": "ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", + "@dynamicAlbumAlreadyExists": {}, + "newAlbumDialogNameLabel": "ಆಲ್ಬಮ್ ಹೆಸರು", + "@newAlbumDialogNameLabel": {}, + "renameAlbumDialogLabelAlreadyExistsHelper": "ಕೋಶವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", + "@renameAlbumDialogLabelAlreadyExistsHelper": {}, + "renameEntrySetPagePreviewSectionTitle": "ಮುನ್ನೋಟ", + "@renameEntrySetPagePreviewSectionTitle": {}, + "renameEntrySetPageInsertTooltip": "ಕ್ಷೇತ್ರವನ್ನು ಸೇರಿಸಿ", + "@renameEntrySetPageInsertTooltip": {}, + "mapStyleGoogleHybrid": "ಗೂಗಲ್ ನಕಾಶೆಗಳು (ಹೈಬ್ರಿಡ್)", + "@mapStyleGoogleHybrid": {}, + "viewerTransitionFade": "ಮರೆಯಾಗಿಸು", + "@viewerTransitionFade": {}, + "videoResumeDialogMessage": "{time}ಕ್ಕೆ ಪುನರಾರಂಭಿಸಲು ನೀವು ಬಯಸುವಿರಾ?", + "@videoResumeDialogMessage": { + "placeholders": { + "time": { + "type": "String", + "example": "13:37" + } + } + }, + "videoStartOverButtonLabel": "ಬುಡದಿಂದ ಪ್ರಾರಂಭಿಸಿ", + "@videoStartOverButtonLabel": {}, + "newAlbumDialogAlbumAlreadyExistsHelper": "ಆಲ್ಬಮ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", + "@newAlbumDialogAlbumAlreadyExistsHelper": {}, + "passwordDialogConfirm": "ಕೀಲಿಪದ ಖಚಿತಪಡಿಸಿ", + "@passwordDialogConfirm": {}, + "exportEntryDialogWidth": "ಅಗಲ", + "@exportEntryDialogWidth": {}, + "editEntryDateDialogSetCustom": "ನಿಗದಿತ ದಿನಾಂಕವನ್ನು ಹೊಂದಿಸಿ", + "@editEntryDateDialogSetCustom": {}, + "editEntryDateDialogCopyField": "ಬೇರೆಯ ದಿನಾಂಕದಿಂದ ನಕಲಿಸಿ", + "@editEntryDateDialogCopyField": {}, + "editEntryDateDialogExtractFromTitle": "ಶೀರ್ಷಿಕೆಯಿಂದ ಆಯ್ದು ತೆಗೆಯಿರಿ", + "@editEntryDateDialogExtractFromTitle": {}, + "lengthUnitPixel": "px", + "@lengthUnitPixel": {}, + "keepScreenOnAlways": "ಯಾವಾಗಲೂ", + "@keepScreenOnAlways": {}, + "keepScreenOnViewerOnly": "ವೀಕ್ಷಣಾ ಪುಟದಲ್ಲಿ ಮಾತ್ರ", + "@keepScreenOnViewerOnly": {}, + "subtitlePositionBottom": "ಬುಡ", + "@subtitlePositionBottom": {}, + "maxBrightnessNever": "ಎಂದಿಗೂ ಇಲ್ಲ", + "@maxBrightnessNever": {}, + "newDynamicAlbumDialogTitle": "ಹೊಸ ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್", + "@newDynamicAlbumDialogTitle": {}, + "mapStyleOsmLiberty": "OSM ಸ್ವಾತಂತ್ರ್ಯ", + "@mapStyleOsmLiberty": {}, + "vaultLockTypePassword": "ಕೀಲಿಪದ", + "@vaultLockTypePassword": {}, + "settingsVideoEnablePip": "ಚಿತ್ರದೊಳಗಿನ ಚಿತ್ರಣ", + "@settingsVideoEnablePip": {}, + "videoControlsPlayOutside": "ಇನ್ನೊಂದು ಪ್ಲೇಯರ್ ನಲ್ಲಿ ತೆರೆಯಿರಿ", + "@videoControlsPlayOutside": {}, + "storageVolumeDescriptionFallbackNonPrimary": "ಎಸ್ ಡಿ ಕಾರ್ಡ್", + "@storageVolumeDescriptionFallbackNonPrimary": {}, + "viewerTransitionNone": "ಏನಿಲ್ಲ", + "@viewerTransitionNone": {}, + "wallpaperTargetHome": "ಮುಖ ಪರದೆ", + "@wallpaperTargetHome": {}, + "notEnoughSpaceDialogMessage": "ಈ ಕಾರ್ಯಾಚರಣೆಗೆ ಪೂರ್ಣಗೊಳ್ಳಲು “{volume}” ನಲ್ಲಿ {neededSize} ಉಚಿತ ಸ್ಥಳಾವಕಾಶದ ಅಗತ್ಯವಿದೆ, ಆದರೆ ಕೇವಲ {freeSize} ಮಾತ್ರ ಲಭ್ಯವಿದೆ.", + "@notEnoughSpaceDialogMessage": { + "placeholders": { + "neededSize": { + "type": "String", + "example": "314 MB" + }, + "freeSize": { + "type": "String", + "example": "123 MB" + }, + "volume": { + "type": "String", + "example": "SD card", + "description": "the name of a storage volume" + } + } + }, + "nameConflictDialogSingleSourceMessage": "ಗಮ್ಯಸ್ಥಾನ ಕೋಶದಲ್ಲಿರುವ ಕೆಲವು ಕಡತಗಳು ಒಂದೇ ಹೆಸರನ್ನು ಹೊಂದಿವೆ.", + "@nameConflictDialogSingleSourceMessage": {}, + "newVaultDialogTitle": "ಹೊಸ ನೆಲಮಾಳಿಗೆ", + "@newVaultDialogTitle": {}, + "newAlbumDialogNameLabelAlreadyExistsHelper": "ಕೋಶವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ", + "@newAlbumDialogNameLabelAlreadyExistsHelper": {}, + "newAlbumDialogStorageLabel": "ಸಂಗ್ರಹಣೆ:", + "@newAlbumDialogStorageLabel": {}, + "vaultDialogLockTypeLabel": "ಲಾಕ್ ವಿಧ", + "@vaultDialogLockTypeLabel": {}, + "pinDialogConfirm": "PIN ಖಚಿತಪಡಿಸಿ", + "@pinDialogConfirm": {}, + "editEntryDialogCopyFromItem": "ಇತರ ವಸ್ತುವಿನಿಂದ ನಕಲಿಸಿ", + "@editEntryDialogCopyFromItem": {}, + "unitSystemMetric": "ಮೆಟ್ರಿಕ್", + "@unitSystemMetric": {}, + "renameEntrySetPageTitle": "ಮರುಹೆಸರಿಸಿ", + "@renameEntrySetPageTitle": {}, + "videoResumptionModeAlways": "ಯಾವಾಗಲೂ", + "@videoResumptionModeAlways": {}, + "chipActionCreateAlbum": "ಆಲ್ಬಮ್ ರಚಿಸಿ", + "@chipActionCreateAlbum": {}, + "chipActionCreateVault": "ನೆಲಮಾಳಿಗೆ ರಚಿಸಿ", + "@chipActionCreateVault": {}, + "chipActionConfigureVault": "ನೆಲಮಾಳಿಗೆ ಸಂರಚಿಸಿ", + "@chipActionConfigureVault": {}, + "entryActionCopyToClipboard": "ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ಗೆ ನಕಲಿಸಿ", + "@entryActionCopyToClipboard": {}, + "entryActionDelete": "ಅಳಿಸಿ", + "@entryActionDelete": {}, + "entryActionConvert": "ಪರಿವರ್ತಿಸಿ", + "@entryActionConvert": {}, + "entryActionRotateCW": "ಪ್ರದಕ್ಷಿಣಾಕಾರವಾಗಿ ತಿರುಗಿಸಿ", + "@entryActionRotateCW": {}, + "entryActionFlip": "ಅಡ್ಡ ಮಗುಚು", + "@entryActionFlip": {}, + "entryActionExport": "ರಫ್ತು", + "@entryActionExport": {}, + "entryActionInfo": "ಮಾಹಿತಿ", + "@entryActionInfo": {}, + "entryActionRename": "ಮರುನಾಮಕರಣ", + "@entryActionRename": {}, + "entryActionRestore": "ಮರುಸ್ಥಾಪಿಸಿ", + "@entryActionRestore": {}, + "entryActionRotateCCW": "ಅಪ್ರದಕ್ಷಿಣಾಕಾರವಾಗಿ ತಿರುಗಿಸಿ", + "@entryActionRotateCCW": {}, + "coordinateDms": "{coordinate} {direction}", + "@coordinateDms": { + "placeholders": { + "coordinate": { + "type": "String", + "example": "38° 41′ 47.72″" + }, + "direction": { + "type": "String", + "example": "S" + } + } + }, + "coordinateDmsNorth": "ಉ", + "@coordinateDmsNorth": {}, + "coordinateDmsWest": "ಪ", + "@coordinateDmsWest": {}, + "coordinateDmsSouth": "ದ", + "@coordinateDmsSouth": {}, + "displayRefreshRatePreferHighest": "ಗರಿಷ್ಠ ದರ", + "@displayRefreshRatePreferHighest": {}, + "displayRefreshRatePreferLowest": "ಕನಿಷ್ಠ ದರ", + "@displayRefreshRatePreferLowest": {}, + "nameConflictStrategyRename": "ಮರುನಾಮಕರಣ", + "@nameConflictStrategyRename": {}, + "nameConflictStrategyReplace": "ಬದಲಾಯಿಸು", + "@nameConflictStrategyReplace": {}, + "nameConflictStrategySkip": "ಬಿಟ್ಟುಬಿಡು", + "@nameConflictStrategySkip": {}, + "overlayHistogramLuminance": "ಪ್ರಕಾಶ", + "@overlayHistogramLuminance": {}, + "themeBrightnessDark": "ಗಾಢ ಬಣ್ಣ", + "@themeBrightnessDark": {}, + "widgetDisplayedItemMostRecent": "ಅತ್ಯಂತ ಇತ್ತೀಚಿನ", + "@widgetDisplayedItemMostRecent": {}, + "widgetOpenPageHome": "ಮುಖ್ಯಪರದೆ ತೆರೆಯಿರಿ", + "@widgetOpenPageHome": {}, + "widgetOpenPageCollection": "ಸಂಗ್ರಹವನ್ನು ತೆರೆಯಿರಿ", + "@widgetOpenPageCollection": {}, + "missingSystemFilePickerDialogMessage": "ವ್ಯವಸ್ಥೆಯ ಕಡತ ಆರಿಸುವಿಕೆ ಕಾಣೆಯಾಗಿದೆ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.", + "@missingSystemFilePickerDialogMessage": {}, + "unsupportedTypeDialogMessage": "{count, plural, =1{ಈ ಕಾರ್ಯಾಚರಣೆಯು ಈ ವಿಧದ ವಸ್ತುವಿಗೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ: {types}.} other{ಈ ಕಾರ್ಯಾಚರಣೆಯು ಈ ವಿಧದ ವಸ್ತುಗಳಿಗೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ: {types}.}}", + "@unsupportedTypeDialogMessage": { + "placeholders": { + "count": { + "type": "int" + }, + "types": { + "type": "String", + "example": "GIF, TIFF, MP4", + "description": "a list of unsupported types" + } + } + }, + "nameConflictDialogMultipleSourceMessage": "ಕೆಲವು ಕಡತಗಳು ಒಂದೇ ಹೆಸರನ್ನು ಹೊಂದಿವೆ.", + "@nameConflictDialogMultipleSourceMessage": {}, + "addShortcutDialogLabel": "ಶಾರ್ಟ್ಕಟ್ ಹೆಸರು", + "@addShortcutDialogLabel": {}, + "binEntriesConfirmationDialogMessage": "{count, plural, =1{ಇದನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸುವುದೇ?} other{{count} ವಸ್ತುಗಳನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸುವುದೇ?}}", + "@binEntriesConfirmationDialogMessage": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "addShortcutButtonLabel": "ಸೇರಿಸು", + "@addShortcutButtonLabel": {}, + "noMatchingAppDialogMessage": "ಇದನ್ನು ನಿಭಾಯಿಸಬಲ್ಲ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಲ್ಲ.", + "@noMatchingAppDialogMessage": {}, + "deleteEntriesConfirmationDialogMessage": "{count, plural, =1{ಇದನ್ನು ಅಳಿಸುವುದೇ?} other{{count} ವಸ್ತುಗಳನ್ನು ಅಳಿಸುವುದೇ?}}", + "@deleteEntriesConfirmationDialogMessage": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "videoResumeButtonLabel": "ಮುಂದುವರೆಸಿ", + "@videoResumeButtonLabel": {}, + "setCoverDialogLatest": "ಹೊಚ್ಚಹೊಸ ವಸ್ತುಗಳು", + "@setCoverDialogLatest": {}, + "newAlbumDialogTitle": "ಹೊಸ ಆಲ್ಬಮ್", + "@newAlbumDialogTitle": {}, + "setCoverDialogCustom": "ಇಚ್ಛಾನುಸಾರ", + "@setCoverDialogCustom": {}, + "hideFilterConfirmationDialogMessage": "ಹೊಂದಿಕೆಯ ಚಿತ್ರಗಳನ್ನು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ನಿಮ್ಮ ಸಂಗ್ರಹದಿಂದ ಮರೆಮಾಡಲಾಗುತ್ತದೆ. “ಗೌಪ್ಯತೆ” ಸಂಯೋಜನೆಗಳಿಂದ ನೀವು ಅವುಗಳನ್ನು ಮತ್ತೆ ತೋರಿಸಬಹುದು.\n\nನೀವು ಅವುಗಳನ್ನು ಮರೆಮಾಡಲು ಬಯಸುತ್ತೀರಾ?", + "@hideFilterConfirmationDialogMessage": {}, + "editEntryDateDialogSourceFileModifiedDate": "ಕಡತ ಮಾರ್ಪಡಿಸಿದ ದಿನಾಂಕ", + "@editEntryDateDialogSourceFileModifiedDate": {}, + "editEntryLocationDialogImportGpx": "ಜಿಪಿಎಕ್ಸ್ ಆಮದು ಮಾಡಿ", + "@editEntryLocationDialogImportGpx": {}, + "editEntryDateDialogShift": "ಸ್ಥಳಾಂತರಿಸು", + "@editEntryDateDialogShift": {}, + "durationDialogMinutes": "ನಿಮಿಷಗಳು", + "@durationDialogMinutes": {}, + "durationDialogSeconds": "ಕ್ಷಣಗಳು", + "@durationDialogSeconds": {}, + "editEntryLocationDialogTitle": "ಸ್ಥಳ", + "@editEntryLocationDialogTitle": {}, + "editEntryLocationDialogLatitude": "ಅಕ್ಷಾಂಶ", + "@editEntryLocationDialogLatitude": {}, + "editEntryLocationDialogSetCustom": "ನಿಗದಿತ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಿ", + "@editEntryLocationDialogSetCustom": {}, + "editEntryLocationDialogChooseOnMap": "ನಕ್ಷೆಯಲ್ಲಿ ಆರಿಸಿ", + "@editEntryLocationDialogChooseOnMap": {}, + "durationDialogHours": "ಘಂಟೆಗಳು", + "@durationDialogHours": {}, + "editEntryLocationDialogLongitude": "ರೇಖಾಂಶ", + "@editEntryLocationDialogLongitude": {}, + "albumDownload": "ಇಳಿಸು", + "@albumDownload": {}, + "menuActionSlideshow": "ಸ್ಲೈಡ್ ಶೋ", + "@menuActionSlideshow": {}, + "newFilterBanner": "ಹೊಸ", + "@newFilterBanner": {}, + "statePageTitle": "ರಾಜ್ಯಗಳು", + "@statePageTitle": {}, + "settingsCollectionSelectionQuickActionEditorBanner": "ಗುಂಡಿಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು ವಸ್ತುಗಳನ್ನು ತಡಕಾಡುವಾಗ ಯಾವ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ.", + "@settingsCollectionSelectionQuickActionEditorBanner": {}, + "settingsThumbnailShowMotionPhotoIcon": "ಚಲನಾ ಚಿತ್ರದ ಚಿನ್ಹೆಯನ್ನು ತೋರಿಸಿ", + "@settingsThumbnailShowMotionPhotoIcon": {}, + "settingsThumbnailShowVideoDuration": "ವಿಡಿಯೋ ಕಾಲಾವಧಿಯನ್ನು ತೋರಿಸಿ", + "@settingsThumbnailShowVideoDuration": {}, + "settingsVideoPageTitle": "ವಿಡಿಯೋ ಸಂಯೋಜನೆಗಳು", + "@settingsVideoPageTitle": {}, + "settingsViewerQuickActionEditorAvailableButtonsSectionTitle": "ಲಭ್ಯವಿರುವ ಗುಂಡಿಗಳು", + "@settingsViewerQuickActionEditorAvailableButtonsSectionTitle": {}, + "settingsSlideshowFillScreen": "ಪೂರ್ಣ ಪರದೆ", + "@settingsSlideshowFillScreen": {}, + "settingsVideoBackgroundModeDialogTitle": "ಹಿನ್ನೆಲೆ ಕ್ರಮ", + "@settingsVideoBackgroundModeDialogTitle": {}, + "settingsVideoButtonsTile": "ಒತ್ತುಗುಂಡಿಗಳು", + "@settingsVideoButtonsTile": {}, + "settingsVideoPlaybackPageTitle": "ಪ್ಲೇಬ್ಯಾಕ್", + "@settingsVideoPlaybackPageTitle": {}, + "settingsVideoControlsPageTitle": "ನಿಯಂತ್ರಣಗಳು", + "@settingsVideoControlsPageTitle": {}, + "settingsVideoGestureSideDoubleTapSeek": "ಮುಂದೆ/ಹಿಂದೆ ಚಲಿಸಲು ಪರದೆಯ ಅಂಚಿನಲ್ಲಿ ಮಾಡಲು ದ್ವಿಗುಣ ತಟ್ಟಿ", + "@settingsVideoGestureSideDoubleTapSeek": {}, + "viewerInfoOpenLinkText": "ತೆರೆಯಿರಿ", + "@viewerInfoOpenLinkText": {}, + "aboutTranslatorsSectionTitle": "ಅನುವಾದಕರು", + "@aboutTranslatorsSectionTitle": {}, + "tileLayoutList": "ಪಟ್ಟಿ", + "@tileLayoutList": {}, + "aboutLicensesBanner": "ಈ ಅಪ್ಲಿಕೇಶನ್ ಈ ಕೆಳಗಿನ ಮುಕ್ತ-ಮೂಲ ಪೊಟ್ಟಣಗಳು ಮತ್ತು ಭಂಡಾರಗಳನ್ನು ಬಳಸುತ್ತದೆ.", + "@aboutLicensesBanner": {}, + "aboutPageTitle": "ಕುರಿತು", + "@aboutPageTitle": {}, + "filterMimeVideoLabel": "ವಿಡಿಯೋ", + "@filterMimeVideoLabel": {}, + "collectionSelectPageTitle": "ವಸ್ತುಗಳನ್ನು ಆರಿಸಿ", + "@collectionSelectPageTitle": {}, + "dateYesterday": "ನಿನ್ನೆ", + "@dateYesterday": {}, + "collectionEditFailureFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಸಂಪಾದಿಸಲು ವಿಫಲವಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಸಂಪಾದಿಸಲು ವಿಫಲವಾಗಿದೆ}}", + "@collectionEditFailureFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "settingsCoordinateFormatDialogTitle": "ನಿರ್ದೇಶಾಂಕ ಸ್ವರೂಪ", + "@settingsCoordinateFormatDialogTitle": {}, + "collectionRenameSuccessFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಮರುಹೆಸರಿಸಲಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಮರುಹೆಸರಿಸಲಾಗಿದೆ}}", + "@collectionRenameSuccessFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "drawerCollectionMotionPhotos": "ಚಲಿಸುವ ಚಿತ್ರಗಳು", + "@drawerCollectionMotionPhotos": {}, + "drawerPlacePage": "ಸ್ಥಳಗಳು", + "@drawerPlacePage": {}, + "settingsSubtitleThemeShowOutline": "ಬಾಹ್ಯರೇಖೆ ಮತ್ತು ನೆರಳನ್ನು ತೋರಿಸಿ", + "@settingsSubtitleThemeShowOutline": {}, + "collectionCopySuccessFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ನಕಲಿಸಲಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ನಕಲಿಸಲಾಗಿದೆ}}", + "@collectionCopySuccessFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "albumCamera": "ಕ್ಯಾಮೆರಾ", + "@albumCamera": {}, + "tagEditorDiscardDialogMessage": "ನೀವು ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸಲು ಬಯಸುವಿರಾ?", + "@tagEditorDiscardDialogMessage": {}, + "settingsDisplayUseTvInterface": "ಆಂಡ್ರಾಯ್ಡ್ ಟಿವಿ ಇಂಟರ್ಫೇಸ್", + "@settingsDisplayUseTvInterface": {}, + "sortOrderOldestFirst": "ಹಳೆಯದು ಮೊದಲು", + "@sortOrderOldestFirst": {}, + "settingsDisabled": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ", + "@settingsDisabled": {}, + "settingsKeepScreenOnDialogTitle": "ಪರದೆಯನ್ನು ಚಾಲೂ ಇಡಿ", + "@settingsKeepScreenOnDialogTitle": {}, + "tagEditorSectionPlaceholders": "ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್‌ಗಳು", + "@tagEditorSectionPlaceholders": {}, + "settingsNavigationDrawerBanner": "ಮೆನು ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಮತ್ತು ಮರುಕ್ರಮಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ.", + "@settingsNavigationDrawerBanner": {}, + "collectionMoveFailureFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ವಿಫಲವಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ವಿಫಲವಾಗಿದೆ}}", + "@collectionMoveFailureFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "settingsCollectionBrowsingQuickActionEditorBanner": "ಗುಂಡಿಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು ವಸ್ತುಗಳನ್ನು ತಡಕಾಡುವಾಗ ಯಾವ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿ.", + "@settingsCollectionBrowsingQuickActionEditorBanner": {}, + "settingsViewerQuickActionEditorBanner": "ಗುಂಡಿಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು ವೀಕ್ಷಕದಲ್ಲಿ ಯಾವ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿ.", + "@settingsViewerQuickActionEditorBanner": {}, + "settingsSubtitleThemeTextAlignmentLeft": "ಎಡ", + "@settingsSubtitleThemeTextAlignmentLeft": {}, + "wallpaperUseScrollEffect": "ಮುಖಪುಟದಲ್ಲಿ ಸುರುಳಿ ಪರಿಣಾಮವನ್ನು ಬಳಸಿ", + "@wallpaperUseScrollEffect": {}, + "panoramaEnableSensorControl": "ಸಂವೇದಕ ನಿಯಂತ್ರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ", + "@panoramaEnableSensorControl": {}, + "settingsVideoGestureVerticalDragBrightnessVolume": "ಪ್ರಕಾಶ/ಶಬ್ದಪ್ರಮಾಣ ಹೊಂದಿಸಲು ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಜಾರಿಸಿ", + "@settingsVideoGestureVerticalDragBrightnessVolume": {}, + "settingsAllowErrorReporting": "ಅನಾಮಧೇಯ ದೋಷ ವರದಿಯನ್ನು ಅನುಮತಿಸಿ", + "@settingsAllowErrorReporting": {}, + "videoStreamSelectionDialogText": "ಅಡಿಬರಹ", + "@videoStreamSelectionDialogText": {}, + "drawerCollectionAnimated": "ಅನಿಮೇಟೆಡ್", + "@drawerCollectionAnimated": {}, + "sortByDuration": "ಅವಧಿಯಂತೆ", + "@sortByDuration": {}, + "settingsActionImportDialogTitle": "ಆಮದು", + "@settingsActionImportDialogTitle": {}, + "setHomeCustom": "ಇಚ್ಛಾನುಸಾರ", + "@setHomeCustom": {}, + "settingsConfirmationVaultDataLoss": "ನೆಲಮಾಳಿಗೆಯ ದತ್ತಾಂಶ ನಷ್ಟವಾಗುವುದನ್ನು ಎಚ್ಚರಿಸಿ", + "@settingsConfirmationVaultDataLoss": {}, + "settingsConfirmationAfterMoveToBinItems": "ವಸ್ತುಗಳನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸಿದ ನಂತರ ಸಂದೇಶವನ್ನು ತೋರಿಸಿ", + "@settingsConfirmationAfterMoveToBinItems": {}, + "settingsNavigationDrawerTabTypes": "ಪ್ರಕಾರಗಳು", + "@settingsNavigationDrawerTabTypes": {}, + "settingsThumbnailOverlayTile": "ಮೇಲ್ಪದರ", + "@settingsThumbnailOverlayTile": {}, + "settingsAllowMediaManagement": "ಮಾಧ್ಯಮ ನಿರ್ವಹಣೆಯನ್ನು ಅನುಮತಿಸಿ", + "@settingsAllowMediaManagement": {}, + "settingsWidgetShowOutline": "ರೂಪರೇಖೆ", + "@settingsWidgetShowOutline": {}, + "viewerOpenPanoramaButtonLabel": "ಪನೋರಮಾ ತೆರೆಯಿರಿ", + "@viewerOpenPanoramaButtonLabel": {}, + "tagPlaceholderPlace": "ಸ್ಥಳ", + "@tagPlaceholderPlace": {}, + "editEntryLocationDialogTimeShift": "ಸಮಯ ಸ್ಥಳಾಂತರ", + "@editEntryLocationDialogTimeShift": {}, + "collectionActionHideTitleSearch": "ಶೀರ್ಷಿಕೆ ಸೋಸುಕ ಅಡಗಿಸಿ", + "@collectionActionHideTitleSearch": {}, + "collectionActionMove": "ಆಲ್ಬಮ್‌ಗೆ ಸರಿಸಿ", + "@collectionActionMove": {}, + "collectionRenameFailureFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಮರುಹೆಸರಿಸಲು ವಿಫಲವಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಮರುಹೆಸರಿಸಲು ವಿಫಲವಾಗಿದೆ}}", + "@collectionRenameFailureFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "collectionEmptyVideos": "ವೀಡಿಯೊಗಳಿಲ್ಲ", + "@collectionEmptyVideos": {}, + "collectionEmptyFavourites": "ಮೆಚ್ಚಿನವುಗಳಿಲ್ಲ", + "@collectionEmptyFavourites": {}, + "drawerSettingsButton": "ಸಂಯೋಜನೆಗಳು", + "@drawerSettingsButton": {}, + "drawerCountryPage": "ದೇಶಗಳು", + "@drawerCountryPage": {}, + "sortOrderNewestFirst": "ಹೊಸದು ಮೊದಲು", + "@sortOrderNewestFirst": {}, + "sortOrderHighestFirst": "ಹೆಚ್ಚಿನದು ಮೊದಲು", + "@sortOrderHighestFirst": {}, + "albumGroupType": "ಪ್ರಕಾರದಂತೆ", + "@albumGroupType": {}, + "settingsVideoResumptionModeTile": "ಮುಂದುವರೆಸು", + "@settingsVideoResumptionModeTile": {}, + "settingsViewerSlideshowPageTitle": "ಜಾರುಫಲಕ", + "@settingsViewerSlideshowPageTitle": {}, + "statsTopStatesSectionTitle": "ಅಗ್ರ ರಾಜ್ಯಗಳು", + "@statsTopStatesSectionTitle": {}, + "viewerSetWallpaperButtonLabel": "ಭಿತ್ತಿಚಿತ್ರ ಹೊಂದಿಸಿ", + "@viewerSetWallpaperButtonLabel": {}, + "viewerInfoUnknown": "ಅಜ್ಞಾತ", + "@viewerInfoUnknown": {}, + "viewerInfoLabelDate": "ದಿನಾಂಕ", + "@viewerInfoLabelDate": {}, + "viewerInfoLabelDescription": "ವಿವರಣೆ", + "@viewerInfoLabelDescription": {}, + "settingsWidgetOpenPage": "ವಿಜೆಟ್ ಮೇಲೆ ಸ್ಪರ್ಶಿಸುವಾಗ", + "@settingsWidgetOpenPage": {}, + "viewerInfoLabelDuration": "ಅವಧಿ", + "@viewerInfoLabelDuration": {}, + "viewerInfoLabelCoordinates": "ನಿರ್ದೇಶಾಂಕ", + "@viewerInfoLabelCoordinates": {}, + "videoStreamSelectionDialogAudio": "ಆಡಿಯೋ", + "@videoStreamSelectionDialogAudio": {}, + "selectStorageVolumeDialogTitle": "ಸಂಗ್ರಹಣೆ ಆಯ್ಕೆ ಮಾಡಿ", + "@selectStorageVolumeDialogTitle": {}, + "settingsUnitSystemTile": "ಏಕಮಾನಗಳು", + "@settingsUnitSystemTile": {}, + "editEntryRatingDialogTitle": "ರೇಟಿಂಗ್", + "@editEntryRatingDialogTitle": {}, + "removeEntryMetadataDialogTitle": "ಮೆಟಾಡೇಟಾ ತೆಗೆಯುವಿಕೆ", + "@removeEntryMetadataDialogTitle": {}, + "genericSuccessFeedback": "ಮುಗಿದಿದೆ!", + "@genericSuccessFeedback": {}, + "appPickDialogTitle": "ಅಪ್ಲಿಕೇಶನ್ ಆರಿಸಿ", + "@appPickDialogTitle": {}, + "menuActionSelectAll": "ಎಲ್ಲವನ್ನು ಆರಿಸು", + "@menuActionSelectAll": {}, + "menuActionSelectNone": "ಏನನ್ನು ಆರಿಸಬೇಡಿ", + "@menuActionSelectNone": {}, + "viewDialogLayoutSectionTitle": "ವಿನ್ಯಾಸ", + "@viewDialogLayoutSectionTitle": {}, + "castDialogTitle": "ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳು", + "@castDialogTitle": {}, + "coverDialogTabApp": "ಅಪ್ಲಿಕೇಶನ್", + "@coverDialogTabApp": {}, + "coverDialogTabColor": "ವರ್ಣ", + "@coverDialogTabColor": {}, + "aboutLinkLicense": "ಪರವಾನಗಿ", + "@aboutLinkLicense": {}, + "aboutDataUsageMisc": "ನಾನಾ ರೀತಿಯ", + "@aboutDataUsageMisc": {}, + "aboutCreditsSectionTitle": "ಮನ್ನಣೆಗಳು", + "@aboutCreditsSectionTitle": {}, + "settingsNavigationSectionTitle": "ಸಂಚಾರ", + "@settingsNavigationSectionTitle": {}, + "settingsThumbnailShowRating": "ದರವನ್ನು ತೋರಿಸಿ", + "@settingsThumbnailShowRating": {}, + "settingsSubtitleThemeTextAlignmentCenter": "ಮಧ್ಯ", + "@settingsSubtitleThemeTextAlignmentCenter": {}, + "settingsLanguageTile": "ಭಾಷೆ", + "@settingsLanguageTile": {}, + "statsTopTagsSectionTitle": "ಅಗ್ರ ಟ್ಯಾಗುಗಳು", + "@statsTopTagsSectionTitle": {}, + "tagEditorSectionRecent": "ಇತ್ತೀಚಿನವು", + "@tagEditorSectionRecent": {}, + "filePickerOpenFrom": "ಇಂದ ತೆರೆಯಿರಿ", + "@filePickerOpenFrom": {}, + "aboutLinkPolicy": "ಗೌಪ್ಯತೆ ನೀತಿ", + "@aboutLinkPolicy": {}, + "aboutBugReportButton": "ವರದಿ", + "@aboutBugReportButton": {}, + "aboutDataUsageSectionTitle": "ದತ್ತಾಂಶ ಬಳಕೆ", + "@aboutDataUsageSectionTitle": {}, + "dateToday": "ಇಂದು", + "@dateToday": {}, + "drawerAboutButton": "ಕುರಿತು", + "@drawerAboutButton": {}, + "drawerCollectionImages": "ಚಿತ್ರಗಳು", + "@drawerCollectionImages": {}, + "drawerCollectionVideos": "ವೀಡಿಯೊಗಳು", + "@drawerCollectionVideos": {}, + "drawerCollectionPanoramas": "ಪನೋರಮಾಗಳು", + "@drawerCollectionPanoramas": {}, + "drawerCollectionRaws": "Raw ಚಿತ್ರಗಳು", + "@drawerCollectionRaws": {}, + "drawerCollectionSphericalVideos": "360° ವಿಡಿಯೋಗಳು", + "@drawerCollectionSphericalVideos": {}, + "drawerAlbumPage": "ಆಲ್ಬಮ್ ಗಳು", + "@drawerAlbumPage": {}, + "sortByDate": "ದಿನಾಂಕದಂತೆ", + "@sortByDate": {}, + "sortOrderAtoZ": "ವರ್ಣಮಾಲೆಯಂತೆ (A to Z)", + "@sortOrderAtoZ": {}, + "albumEmpty": "ಆಲ್ಬಮ್‌ಗಳಿಲ್ಲ", + "@albumEmpty": {}, + "stateEmpty": "ರಾಜ್ಯಗಳಿಲ್ಲ", + "@stateEmpty": {}, + "tagEmpty": "ಟ್ಯಾಗುಗಳಿಲ್ಲ", + "@tagEmpty": {}, + "searchDateSectionTitle": "ದಿನಾಂಕ", + "@searchDateSectionTitle": {}, + "searchAlbumsSectionTitle": "ಆಲ್ಬಮ್ ಗಳು", + "@searchAlbumsSectionTitle": {}, + "searchCountriesSectionTitle": "ದೇಶಗಳು", + "@searchCountriesSectionTitle": {}, + "searchPlacesSectionTitle": "ಸ್ಥಳಗಳು", + "@searchPlacesSectionTitle": {}, + "searchStatesSectionTitle": "ರಾಜ್ಯಗಳು", + "@searchStatesSectionTitle": {}, + "searchTagsSectionTitle": "ಟ್ಯಾಗುಗಳು", + "@searchTagsSectionTitle": {}, + "searchRatingSectionTitle": "ದರಗಳು", + "@searchRatingSectionTitle": {}, + "settingsPageTitle": "ಸಂಯೋಜನೆಗಳು", + "@settingsPageTitle": {}, + "settingsActionExportDialogTitle": "ರಫ್ತು", + "@settingsActionExportDialogTitle": {}, + "settingsNavigationDrawerTabPages": "ಪುಟಗಳು", + "@settingsNavigationDrawerTabPages": {}, + "settingsViewerShowHistogram": "ಹಿಸ್ಟೋಗ್ರಾಮ್ ತೋರಿಸಿ", + "@settingsViewerShowHistogram": {}, + "settingsViewerShowMinimap": "ಚಿಕ್ಕನಕ್ಷೆಯನ್ನು ತೋರಿಸಿ", + "@settingsViewerShowMinimap": {}, + "settingsViewerEnableOverlayBlurEffect": "ಮಸುಕು ಪರಿಣಾಮ", + "@settingsViewerEnableOverlayBlurEffect": {}, + "settingsVideoSectionTitle": "ವಿಡಿಯೋ", + "@settingsVideoSectionTitle": {}, + "settingsEnableBinSubtitle": "ಅಳಿಸಿದ ವಸ್ತುಗಳನ್ನು 30 ದಿನಗಳವರೆಗೆ ಇರಿಸಿ", + "@settingsEnableBinSubtitle": {}, + "settingsRemoveAnimationsTile": "ಅನಿಮೇಷನ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ", + "@settingsRemoveAnimationsTile": {}, + "settingsDisplaySectionTitle": "ಪ್ರದರ್ಶಕ", + "@settingsDisplaySectionTitle": {}, + "settingsCollectionTile": "ಸಂಗ್ರಹ", + "@settingsCollectionTile": {}, + "viewerInfoLabelResolution": "ಅಳತೆ", + "@viewerInfoLabelResolution": {}, + "mapStyleDialogTitle": "ನಕ್ಷೆಯ ಪ್ರಕಾರ", + "@mapStyleDialogTitle": {}, + "mapZoomOutTooltip": "ಕುಗ್ಗಿಸು", + "@mapZoomOutTooltip": {}, + "filePickerUseThisFolder": "ಈ ಕೋಶವನ್ನು ಬಳಸಿ", + "@filePickerUseThisFolder": {}, + "sortByAlbumFileName": "ಆಲ್ಬಮ್ ಮತ್ತು ಕಡತದ ಹೆಸರಿನಂತೆ", + "@sortByAlbumFileName": {}, + "panoramaDisableSensorControl": "ಸಂವೇದಕ ನಿಯಂತ್ರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ", + "@panoramaDisableSensorControl": {}, + "filterTypeAnimatedLabel": "ಆನಿಮೇಟೆಡ್", + "@filterTypeAnimatedLabel": {}, + "filterTypeMotionPhotoLabel": "ಚಲಿಸುವ ಚಿತ್ರ", + "@filterTypeMotionPhotoLabel": {}, + "filterTypePanoramaLabel": "ಪನೋರಮಾ", + "@filterTypePanoramaLabel": {}, + "filterTypeRawLabel": "Raw", + "@filterTypeRawLabel": {}, + "filterTypeSphericalVideoLabel": "360° ವಿಡಿಯೋ", + "@filterTypeSphericalVideoLabel": {}, + "filterTypeGeotiffLabel": "GeoTIFF", + "@filterTypeGeotiffLabel": {}, + "filterMimeImageLabel": "ಚಿತ್ರ", + "@filterMimeImageLabel": {}, + "accessibilityAnimationsRemove": "ಪರದೆಯ ಪರಿಣಾಮಗಳನ್ನು ತಡೆಯಿರಿ", + "@accessibilityAnimationsRemove": {}, + "accessibilityAnimationsKeep": "ಪರದೆಯ ಪರಿಣಾಮಗಳನ್ನು ಇರಿಸಿ", + "@accessibilityAnimationsKeep": {}, + "albumTierNew": "ಹೊಸ", + "@albumTierNew": {}, + "albumTierPinned": "ಚುಚ್ಚಿರುವುದು", + "@albumTierPinned": {}, + "albumTierApps": "ಅಪ್ಲಿಕೇಶನ್‌ಗಳು", + "@albumTierApps": {}, + "aboutBugCopyInfoButton": "ನಕಲಿಸಿ", + "@aboutBugCopyInfoButton": {}, + "aboutBugSaveLogInstruction": "ಅಪ್ಲಿಕೇಶನ್ ದಾಖಲೆಗಳನ್ನು ಕಡತಕ್ಕೆ ಉಳಿಸಿ", + "@aboutBugSaveLogInstruction": {}, + "aboutLicensesFlutterPluginsSectionTitle": "ಫ್ಲಟರ್ ಪ್ಲಗಿನ್‌ಗಳು", + "@aboutLicensesFlutterPluginsSectionTitle": {}, + "aboutLicensesFlutterPackagesSectionTitle": "ಫ್ಲಟರ್ ಪ್ಯಾಕೇಜುಗಳು", + "@aboutLicensesFlutterPackagesSectionTitle": {}, + "collectionPageTitle": "ಸಂಗ್ರಹ", + "@collectionPageTitle": {}, + "collectionPickPageTitle": "ಆರಿಸಿ", + "@collectionPickPageTitle": {}, + "collectionExportFailureFeedback": "{count, plural, =1{1 ಪುಟವನ್ನು ರಫ್ತು ಮಾಡಲು ವಿಫಲವಾಗಿದೆ} other{{count} ಪುಟಗಳನ್ನು ರಫ್ತು ಮಾಡಲು ವಿಫಲವಾಗಿದೆ}}", + "@collectionExportFailureFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "sortOrderLongestFirst": "ಉದ್ದದ್ದು ಮೊದಲು", + "@sortOrderLongestFirst": {}, + "placePageTitle": "ಸ್ಥಳಗಳು", + "@placePageTitle": {}, + "placeEmpty": "ಸ್ಥಳಗಳಿಲ್ಲ", + "@placeEmpty": {}, + "searchRecentSectionTitle": "ಇತ್ತೀಚಿನವು", + "@searchRecentSectionTitle": {}, + "settingsNavigationDrawerTile": "ನ್ಯಾವಿಗೇಷನ್ ಮೆನು", + "@settingsNavigationDrawerTile": {}, + "settingsViewerUseCutout": "ಕಟೌಟ್ ಪ್ರದೇಶವನ್ನು ಬಳಸಿರಿ", + "@settingsViewerUseCutout": {}, + "statsWithGps": "{count, plural, =1{ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು 1 ವಸ್ತು ಹೊಂದಿದೆ } other{ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು {count} ವಸ್ತುಗಳು ಹೊಂದಿವೆ}}", + "@statsWithGps": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "mapAttributionOsmData": "ನಕ್ಷೆಯ ದತ್ತಾಂಶ © [OpenStreetMap](https://www.openstreetmap.org/copyright) ಕೊಡುಗೆದಾರರು", + "@mapAttributionOsmData": {}, + "mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)", + "@mapAttributionOpenTopoMap": {}, + "viewerInfoSearchSuggestionDescription": "ವಿವರಣೆ", + "@viewerInfoSearchSuggestionDescription": {}, + "viewerInfoSearchSuggestionDimensions": "ಆಯಾಮ", + "@viewerInfoSearchSuggestionDimensions": {}, + "viewerInfoSearchSuggestionRights": "ಹಕ್ಕುಗಳು", + "@viewerInfoSearchSuggestionRights": {}, + "collectionEmptyGrantAccessButtonLabel": "ಪ್ರವೇಶವನ್ನು ನೀಡಿ", + "@collectionEmptyGrantAccessButtonLabel": {}, + "sortByItemCount": "ವಸ್ತುಗಳ ಎಣಿಕೆಯಂತೆ", + "@sortByItemCount": {}, + "sortByName": "ಹೆಸರಿನಂತೆ", + "@sortByName": {}, + "albumVideoCaptures": "ವಿಡಿಯೋ ಕೈಸೆರೆಗಳು", + "@albumVideoCaptures": {}, + "settingsCollectionQuickActionsTile": "ತ್ವರಿತ ಕ್ರಮಗಳು", + "@settingsCollectionQuickActionsTile": {}, + "filePickerDoNotShowHiddenFiles": "ಮರೆಮಾಡಿದ ಕಡತಗಳನ್ನು ತೋರಿಸಬೇಡಿ", + "@filePickerDoNotShowHiddenFiles": {}, + "viewerInfoSearchEmpty": "ಹೊಂದಾಣಿಕೆಯ ಕೀಲಿಗಳಿಲ್ಲ", + "@viewerInfoSearchEmpty": {}, + "locationPickerUseThisLocationButton": "ಈ ಸ್ಥಳವನ್ನು ಬಳಸಿ", + "@locationPickerUseThisLocationButton": {}, + "removeEntryMetadataDialogMore": "ಇನ್ನಷ್ಟು", + "@removeEntryMetadataDialogMore": {}, + "videoStreamSelectionDialogVideo": "ವಿಡಿಯೋ", + "@videoStreamSelectionDialogVideo": {}, + "videoStreamSelectionDialogOff": "ನಂದಿಸು", + "@videoStreamSelectionDialogOff": {}, + "videoStreamSelectionDialogTrack": "ಜಾಡು", + "@videoStreamSelectionDialogTrack": {}, + "videoStreamSelectionDialogNoSelection": "ಬೇರೆ ಯಾವುದೇ ಹಾಡುಗಳಿಲ್ಲ.", + "@videoStreamSelectionDialogNoSelection": {}, + "genericFailureFeedback": "ವಿಫಲವಾಗಿದೆ", + "@genericFailureFeedback": {}, + "genericDangerWarningDialogMessage": "ನೀವು ಖಚಿತಪಡಿಸುವಿರೇ?", + "@genericDangerWarningDialogMessage": {}, + "tooManyItemsErrorDialogMessage": "ಕಡಿಮೆ ವಸ್ತುಗಳೊಂದಿಗೆ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.", + "@tooManyItemsErrorDialogMessage": {}, + "menuActionConfigureView": "ನೋಟ", + "@menuActionConfigureView": {}, + "menuActionSelect": "ಆರಿಸು", + "@menuActionSelect": {}, + "aboutDataUsageCache": "ತಾತ್ಕಾಲಿಕ ಸಂಗ್ರಹ", + "@aboutDataUsageCache": {}, + "aboutCreditsWorldAtlas1": "ಈ ಅಪ್ಲಿಕೇಶನ್ TopoJSON ಕಡತವನ್ನು ಇವರಿಂದ ಬಳಸುತ್ತದೆ", + "@aboutCreditsWorldAtlas1": {}, + "appPickDialogNone": "ಏನಿಲ್ಲ", + "@appPickDialogNone": {}, + "aboutBugSectionTitle": "ದೋಷದ ವರದಿ", + "@aboutBugSectionTitle": {}, + "aboutDataUsageData": "ದತ್ತಾಂಶ", + "@aboutDataUsageData": {}, + "aboutLicensesSectionTitle": "ಮುಕ್ತ-ಮೂಲ ಪರವಾನಗಿಗಳು", + "@aboutLicensesSectionTitle": {}, + "aboutLicensesAndroidLibrariesSectionTitle": "ಆಂಡ್ರಾಯ್ಡ್ ಭಂಡಾರಗಳು", + "@aboutLicensesAndroidLibrariesSectionTitle": {}, + "aboutLicensesDartPackagesSectionTitle": "ಡಾರ್ಟ್ ಪ್ಯಾಕೇಜುಗಳು", + "@aboutLicensesDartPackagesSectionTitle": {}, + "aboutLicensesShowAllButtonLabel": "ಎಲ್ಲಾ ಪರವಾನಗಿಗಳನ್ನು ತೋರಿಸಿ", + "@aboutLicensesShowAllButtonLabel": {}, + "policyPageTitle": "ಗೌಪ್ಯತೆ ನೀತಿ", + "@policyPageTitle": {}, + "collectionActionShowTitleSearch": "ಶೀರ್ಷಿಕೆ ಸೋಸುಕ ತೋರಿಸಿ", + "@collectionActionShowTitleSearch": {}, + "collectionActionAddShortcut": "ಶಾರ್ಟ್‌ಕಟ್ ಸೇರಿಸಿ", + "@collectionActionAddShortcut": {}, + "collectionActionEmptyBin": "ತೊಟ್ಟಿಯನ್ನು ಖಾಲಿಮಾಡಿ", + "@collectionActionEmptyBin": {}, + "sortBySize": "ಗಾತ್ರದಂತೆ", + "@sortBySize": {}, + "sortByRating": "ದರದಂತೆ", + "@sortByRating": {}, + "albumGroupVolume": "ಸಂಗ್ರಹಣೆಯ ಗಾತ್ರದಂತೆ", + "@albumGroupVolume": {}, + "searchCollectionFieldHint": "ಸಂಗ್ರಹದಲ್ಲಿ ಹುಡುಕಿ", + "@searchCollectionFieldHint": {}, + "countryPageTitle": "ದೇಶಗಳು", + "@countryPageTitle": {}, + "countryEmpty": "ದೇಶಗಳಿಲ್ಲ", + "@countryEmpty": {}, + "settingsSearchFieldLabel": "ಸಂಯೋಜನೆಗಳಲ್ಲಿ ಹುಡುಕಿ", + "@settingsSearchFieldLabel": {}, + "appExportDynamicAlbums": "ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್ ಗಳು", + "@appExportDynamicAlbums": {}, + "settingsSearchEmpty": "ಹೊಂದುವ ಸಂಯೋಜನೆಗಳಿಲ್ಲ", + "@settingsSearchEmpty": {}, + "appExportSettings": "ಸಂಯೋಜನೆಗಳು", + "@appExportSettings": {}, + "appExportCovers": "ರಕ್ಷಾಕವಚಗಳು", + "@appExportCovers": {}, + "appExportFavourites": "ಮೆಚ್ಚಿನವುಗಳು", + "@appExportFavourites": {}, + "settingsHomeTile": "ಮುಖಪುಟ", + "@settingsHomeTile": {}, + "settingsHomeDialogTitle": "ಮುಖಪುಟ", + "@settingsHomeDialogTitle": {}, + "settingsShowBottomNavigationBar": "ಕೆಳಗಿನ ಸಂಚಾರಪಟ್ಟೆಯನ್ನು ತೋರಿಸಿ", + "@settingsShowBottomNavigationBar": {}, + "settingsKeepScreenOnTile": "ಪರದೆಯನ್ನು ಚಾಲೂ ಇಡಿ", + "@settingsKeepScreenOnTile": {}, + "settingsDoubleBackExit": "ನಿರ್ಗಮಿಸಲು “ಹಿಂದೆ” ಎರಡು ಬಾರಿ ತಟ್ಟಿ", + "@settingsDoubleBackExit": {}, + "settingsConfirmationTile": "ದೃಢೀಕರಣ ಸಂವಾದಗಳು", + "@settingsConfirmationTile": {}, + "settingsConfirmationDialogTitle": "ದೃಢೀಕರಣ ಸಂವಾದಗಳು", + "@settingsConfirmationDialogTitle": {}, + "settingsConfirmationBeforeMoveToBinItems": "ವಸ್ತುಗಳನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸುವ ಮೊದಲು ವಿಚಾರಿಸಿ", + "@settingsConfirmationBeforeMoveToBinItems": {}, + "settingsConfirmationBeforeMoveUndatedItems": "ದಿನಾಂಕವಿಲ್ಲದ ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸುವ ಮೊದಲು ವಿಚಾರಿಸಿ", + "@settingsConfirmationBeforeMoveUndatedItems": {}, + "settingsNavigationDrawerTabAlbums": "ಆಲ್ಬಮ್ ಗಳು", + "@settingsNavigationDrawerTabAlbums": {}, + "settingsNavigationDrawerAddAlbum": "ಆಲ್ಬಮ್ ಸೇರಿಸಿ", + "@settingsNavigationDrawerAddAlbum": {}, + "settingsThumbnailOverlayPageTitle": "ಮೇಲ್ಪದರ", + "@settingsThumbnailOverlayPageTitle": {}, + "settingsThumbnailShowHdrIcon": "HDR ಸಂಕೇತ ತೋರಿಸಿ", + "@settingsThumbnailShowHdrIcon": {}, + "settingsThumbnailShowFavouriteIcon": "ಮೆಚ್ಚಿನ ಸಂಕೇತ ತೋರಿಸಿ", + "@settingsThumbnailShowFavouriteIcon": {}, + "settingsThumbnailShowLocationIcon": "ಸ್ಥಳದ ಚಿನ್ಹೆಯನ್ನು ತೋರಿಸಿ", + "@settingsThumbnailShowLocationIcon": {}, + "settingsThumbnailShowRawIcon": "Raw ಚಿನ್ಹೆಯನ್ನು ತೋರಿಸಿ", + "@settingsThumbnailShowRawIcon": {}, + "settingsViewerGestureSideTapNext": "ಹಿಂದಿನ/ಮುಂದಿನ ವಸ್ತುವನ್ನು ತೋರಿಸಲು ಪರದೆಯ ಅಂಚಿನ ಮೇಲೆ ತಟ್ಟಿ", + "@settingsViewerGestureSideTapNext": {}, + "settingsMotionPhotoAutoPlay": "ಚಾಲನಾ ಚಿತ್ರಗಳ ಸ್ವಯಂಚಾಲನೆ", + "@settingsMotionPhotoAutoPlay": {}, + "settingsViewerQuickActionEmpty": "ಗುಂಡಿಗಳಿಲ್ಲ", + "@settingsViewerQuickActionEmpty": {}, + "settingsViewerOverlayTile": "ಮೇಲ್ಪದರ", + "@settingsViewerOverlayTile": {}, + "settingsViewerOverlayPageTitle": "ಮೇಲ್ಪದರ", + "@settingsViewerOverlayPageTitle": {}, + "settingsViewerShowOverlayOnOpening": "ಪ್ರಾರಂಭದಲ್ಲಿ ತೋರಿಸಿ", + "@settingsViewerShowOverlayOnOpening": {}, + "settingsViewerShowInformationSubtitle": "ಶೀರ್ಷಿಕೆ, ದಿನಾಂಕ, ಸ್ಥಳ ಇತ್ಯಾದಿಗಳನ್ನು ತೋರಿಸಿ.", + "@settingsViewerShowInformationSubtitle": {}, + "settingsViewerShowShootingDetails": "ಸೆರೆಹಿಡಿದ ವಿವರಗಳನ್ನು ತೋರಿಸಿ", + "@settingsViewerShowShootingDetails": {}, + "settingsViewerShowDescription": "ವಿವರಣೆಗಳನ್ನು ತೋರಿಸಿ", + "@settingsViewerShowDescription": {}, + "settingsViewerShowOverlayThumbnails": "ಅಡಕವನ್ನು ತೋರಿಸಿ", + "@settingsViewerShowOverlayThumbnails": {}, + "settingsSlideshowTransitionTile": "ಪರಿವರ್ತನೆ", + "@settingsSlideshowTransitionTile": {}, + "settingsSlideshowRepeat": "ಪುನರಾವರ್ತನೆ", + "@settingsSlideshowRepeat": {}, + "settingsSlideshowShuffle": "ಕಲಸು", + "@settingsSlideshowShuffle": {}, + "settingsSlideshowAnimatedZoomEffect": "ಅನಿಮೇಟೆಡ್ ಹಿಗ್ಗಿಸಿದ ಪರಿಣಾಮ", + "@settingsSlideshowAnimatedZoomEffect": {}, + "settingsSlideshowIntervalTile": "ಮಧ್ಯಂತರ", + "@settingsSlideshowIntervalTile": {}, + "settingsSlideshowVideoPlaybackTile": "ವಿಡಿಯೋ ಪ್ಲೇಬ್ಯಾಕ್", + "@settingsSlideshowVideoPlaybackTile": {}, + "settingsSlideshowVideoPlaybackDialogTitle": "ವಿಡಿಯೋ ಪ್ಲೇಬ್ಯಾಕ್", + "@settingsSlideshowVideoPlaybackDialogTitle": {}, + "settingsVideoEnableHardwareAcceleration": "ಯಂತ್ರಾಂಶ ವೇಗವರ್ಧನೆ", + "@settingsVideoEnableHardwareAcceleration": {}, + "settingsVideoBackgroundMode": "ಹಿನ್ನೆಲೆ ಕ್ರಮ", + "@settingsVideoBackgroundMode": {}, + "settingsVideoResumptionModeDialogTitle": "ಮುಂದುವರೆಸು", + "@settingsVideoResumptionModeDialogTitle": {}, + "settingsVideoControlsTile": "ನಿಯಂತ್ರಣಗಳು", + "@settingsVideoControlsTile": {}, + "settingsSubtitleThemeTextPositionDialogTitle": "ಪಠ್ಯ ಸ್ಥಾನ", + "@settingsSubtitleThemeTextPositionDialogTitle": {}, + "settingsVideoGestureDoubleTapTogglePlay": "ಚಾಲನೆ/ವಿರಾಮ ಮಾಡಲು ದ್ವಿಗುಣ ತಟ್ಟಿ", + "@settingsVideoGestureDoubleTapTogglePlay": {}, + "settingsSubtitleThemeTextAlignmentDialogTitle": "ಪಠ್ಯ ಜೋಡಣೆ", + "@settingsSubtitleThemeTextAlignmentDialogTitle": {}, + "settingsSubtitleThemeTextAlignmentRight": "ಬಲ", + "@settingsSubtitleThemeTextAlignmentRight": {}, + "settingsAllowInstalledAppAccess": "ಅಪ್ಲಿಕೇಶನ್ ಯಾದಿಗೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಿ", + "@settingsAllowInstalledAppAccess": {}, + "settingsAllowInstalledAppAccessSubtitle": "ಆಲ್ಬಮ್ ಪ್ರದರ್ಶನವನ್ನು ಸುಧಾರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ", + "@settingsAllowInstalledAppAccessSubtitle": {}, + "settingsSaveSearchHistory": "ಹುಡುಕಾಟದ ಇತಿಹಾಸವನ್ನು ಉಳಿಸಿ", + "@settingsSaveSearchHistory": {}, + "settingsEnableBin": "ಮರುಬಳಕೆಯ ತೊಟ್ಟಿಯನ್ನು ಬಳಸಿ", + "@settingsEnableBin": {}, + "settingsRemoveAnimationsDialogTitle": "ಅನಿಮೇಷನ್‌ಗಳನ್ನು ತೆಗೆಯಿರಿ", + "@settingsRemoveAnimationsDialogTitle": {}, + "settingsTimeToTakeActionTile": "ಕ್ರಮ ತೆಗೆದುಕೊಳ್ಳಲು ಸಮಯ", + "@settingsTimeToTakeActionTile": {}, + "settingsAccessibilityShowPinchGestureAlternatives": "ಬಹುಸ್ಪರ್ಶ ಗೆಸ್ಚರ್ ಪರ್ಯಾಯಗಳನ್ನು ತೋರಿಸಿ", + "@settingsAccessibilityShowPinchGestureAlternatives": {}, + "settingsThemeBrightnessTile": "ಅಲಂಕಾರ", + "@settingsThemeBrightnessTile": {}, + "settingsThemeBrightnessDialogTitle": "ಅಲಂಕಾರ", + "@settingsThemeBrightnessDialogTitle": {}, + "settingsThemeColorHighlights": "ಬಣ್ಣದ ಮುಖ್ಯಾಂಶಗಳು", + "@settingsThemeColorHighlights": {}, + "settingsHiddenItemsTile": "ಮರೆಮಾಡಿದ ವಸ್ತುಗಳು", + "@settingsHiddenItemsTile": {}, + "settingsDisplayRefreshRateModeDialogTitle": "ರಿಫ್ರೆಶ್ ದರ", + "@settingsDisplayRefreshRateModeDialogTitle": {}, + "settingsLanguageSectionTitle": "ಭಾಷೆ ಮತ್ತು ಸ್ವರೂಪಗಳು", + "@settingsLanguageSectionTitle": {}, + "settingsLanguagePageTitle": "ಭಾಷೆ", + "@settingsLanguagePageTitle": {}, + "settingsCoordinateFormatTile": "ನಿರ್ದೇಶಾಂಕ ಸ್ವರೂಪ", + "@settingsCoordinateFormatTile": {}, + "settingsUnitSystemDialogTitle": "ಏಕಮಾನಗಳು", + "@settingsUnitSystemDialogTitle": {}, + "settingsForceWesternArabicNumeralsTile": "ಅರೇಬಿಕ್ ಅಂಕಿಗಳನ್ನು ಒತ್ತಾಯಿಸಿ", + "@settingsForceWesternArabicNumeralsTile": {}, + "statsTopAlbumsSectionTitle": "ಅಗ್ರ ಆಲ್ಬಮ್ ಗಳು", + "@statsTopAlbumsSectionTitle": {}, + "viewerErrorUnknown": "ಅಯ್ಯೋ!", + "@viewerErrorUnknown": {}, + "viewerInfoLabelOwner": "ಒಡೆಯ", + "@viewerInfoLabelOwner": {}, + "settingsWidgetDisplayedItem": "ಪ್ರದರ್ಶಿಸಲಾದ ವಸ್ತು", + "@settingsWidgetDisplayedItem": {}, + "statsTopCountriesSectionTitle": "ಅಗ್ರ ದೇಶಗಳು", + "@statsTopCountriesSectionTitle": {}, + "viewerInfoPageTitle": "ವಿವರ", + "@viewerInfoPageTitle": {}, + "viewerInfoBackToViewerTooltip": "ವೀಕ್ಷಕಕ್ಕೆ ಹಿಂದಿರುಗಿ", + "@viewerInfoBackToViewerTooltip": {}, + "mapStyleTooltip": "ನಕ್ಷೆಯ ಶೈಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "@mapStyleTooltip": {}, + "mapZoomInTooltip": "ಹಿಗ್ಗಿಸು", + "@mapZoomInTooltip": {}, + "mapAttributionStamen": "ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)", + "@mapAttributionStamen": {}, + "openMapPageTooltip": "ನಕ್ಷೆ ಪುಟದಲ್ಲಿ ವೀಕ್ಷಿಸಿ", + "@openMapPageTooltip": {}, + "viewerInfoViewXmlLinkText": "XML ನೋಡಿ", + "@viewerInfoViewXmlLinkText": {}, + "viewerInfoSearchSuggestionDate": "ದಿನಾಂಕ ಮತ್ತು ಸಮಯ", + "@viewerInfoSearchSuggestionDate": {}, + "tagEditorPageAddTagTooltip": "ಟ್ಯಾಗು ಸೇರಿಸಿ", + "@tagEditorPageAddTagTooltip": {}, + "sourceViewerPageTitle": "ಮೂಲ", + "@sourceViewerPageTitle": {}, + "filePickerShowHiddenFiles": "ಮರೆಮಾಡಿದ ಕಡತಗಳನ್ನು ತೋರಿಸಿ", + "@filePickerShowHiddenFiles": {}, + "albumTierSpecial": "ಸಾಮಾನ್ಯ", + "@albumTierSpecial": {}, + "collectionActionAddDynamicAlbum": "ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್ ಸೇರಿಸಿ", + "@collectionActionAddDynamicAlbum": {}, + "sectionUnknown": "ಅಜ್ಞಾತ", + "@sectionUnknown": {}, + "collectionSelectSectionTooltip": "ವಿಭಾಗವನ್ನು ಆಯ್ಕೆಮಾಡಿ", + "@collectionSelectSectionTooltip": {}, + "drawerTagPage": "ಟ್ಯಾಗುಗಳು", + "@drawerTagPage": {}, + "settingsDefault": "ಡೀಫಾಲ್ಟ್", + "@settingsDefault": {}, + "settingsActionExport": "ರಫ್ತು", + "@settingsActionExport": {}, + "settingsActionImport": "ಆಮದು", + "@settingsActionImport": {}, + "settingsDisplayRefreshRateModeTile": "ರಿಫ್ರೆಶ್ ದರವನ್ನು ಪ್ರದರ್ಶಿಸಿ", + "@settingsDisplayRefreshRateModeTile": {}, + "tagEditorPageNewTagFieldLabel": "ಹೊಸ ಟ್ಯಾಗು", + "@tagEditorPageNewTagFieldLabel": {}, + "tagEditorPageTitle": "Tagಗಳನ್ನು ತಿದ್ದಿ", + "@tagEditorPageTitle": {}, + "removeEntryMetadataDialogAll": "ಎಲ್ಲವೂ", + "@removeEntryMetadataDialogAll": {}, + "removeEntryMetadataMotionPhotoXmpWarningDialogMessage": "ಚಲನೆಯ ಚಿತ್ರದ ಒಳಗೆ ವೀಡಿಯೊವನ್ನು ಚಾಲನೆ ಮಾಡಲು XMP ಅಗತ್ಯವಿದೆ.\n\nನೀವು ಅದನ್ನು ತೆಗೆದುಹಾಕಲು ಬಯಸುತ್ತೀರಾ?", + "@removeEntryMetadataMotionPhotoXmpWarningDialogMessage": {}, + "videoSpeedDialogLabel": "ಚಾಲನೆಯ ವೇಗ", + "@videoSpeedDialogLabel": {}, + "aboutBugReportInstruction": "ದಾಖಲೆಗಳು ಮತ್ತು ಸಾಧನದ ಮಾಹಿತಿಯ ಜೊತೆಗೆ Githubನಲ್ಲಿ ವರದಿ ಮಾಡಿ", + "@aboutBugReportInstruction": {}, + "aboutDataUsageDatabase": "ದತ್ತಾಂಶ ಸಂಚಯ", + "@aboutDataUsageDatabase": {}, + "collectionActionEdit": "ಸಂಪಾದಿಸು", + "@collectionActionEdit": {}, + "dateThisMonth": "ಈ ತಿಂಗಳು", + "@dateThisMonth": {}, + "createAlbumButtonLabel": "ರಚಿಸು", + "@createAlbumButtonLabel": {}, + "collectionDeleteFailureFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ}}", + "@collectionDeleteFailureFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "collectionCopyFailureFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ನಕಲಿಸಲು ವಿಫಲವಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ನಕಲಿಸಲು ವಿಫಲವಾಗಿದೆ}}", + "@collectionCopyFailureFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "sortOrderLowestFirst": "ಕಡಿಮೆಯದು ಮೊದಲು", + "@sortOrderLowestFirst": {}, + "albumGroupNone": "ಗುಂಪು ಮಾಡಬೇಡಿ", + "@albumGroupNone": {}, + "albumMimeTypeMixed": "ಮಿಶ್ರಿತ", + "@albumMimeTypeMixed": {}, + "albumPickPageTitlePick": "ಆಲ್ಬಮ್ ಆಯ್ಕೆಮಾಡಿ", + "@albumPickPageTitlePick": {}, + "tagPageTitle": "ಟ್ಯಾಗುಗಳು", + "@tagPageTitle": {}, + "binPageTitle": "ಮರುಬಳಕೆ ತೊಟ್ಟಿ", + "@binPageTitle": {}, + "explorerPageTitle": "ಪರಿಶೋಧಕ", + "@explorerPageTitle": {}, + "explorerActionSelectStorageVolume": "ಸಂಗ್ರಹಣೆ ಆಯ್ಕೆ ಮಾಡಿ", + "@explorerActionSelectStorageVolume": {}, + "searchMetadataSectionTitle": "ಮೆಟಾಡೇಟಾ", + "@searchMetadataSectionTitle": {}, + "settingsCollectionQuickActionEditorPageTitle": "ತ್ವರಿತ ಕ್ರಮಗಳು", + "@settingsCollectionQuickActionEditorPageTitle": {}, + "settingsCollectionQuickActionTabBrowsing": "ತಡಕಾಟ", + "@settingsCollectionQuickActionTabBrowsing": {}, + "settingsViewerSectionTitle": "ವೀಕ್ಷಕ", + "@settingsViewerSectionTitle": {}, + "settingsImageBackground": "ಚಿತ್ರದ ಹಿನ್ನೆಲೆ", + "@settingsImageBackground": {}, + "settingsViewerShowInformation": "ಮಾಹಿತಿಯನ್ನು ತೋರಿಸಿ", + "@settingsViewerShowInformation": {}, + "settingsViewerShowRatingTags": "ದರಗಳು ಮತ್ತು ಟ್ಯಾಗುಗಳನ್ನು ತೋರಿಸಿ", + "@settingsViewerShowRatingTags": {}, + "settingsViewerSlideshowTile": "ಜಾರುಫಲಕ", + "@settingsViewerSlideshowTile": {}, + "settingsVideoShowVideos": "ವಿಡಿಯೋಗಳನ್ನು ತೋರಿಸಿ", + "@settingsVideoShowVideos": {}, + "settingsVideoPlaybackTile": "ಪ್ಲೇಬ್ಯಾಕ್", + "@settingsVideoPlaybackTile": {}, + "settingsVideoLoopModeTile": "ಆವರ್ತನ ಕ್ರಮ", + "@settingsVideoLoopModeTile": {}, + "settingsVideoLoopModeDialogTitle": "ಆವರ್ತನ ಕ್ರಮ", + "@settingsVideoLoopModeDialogTitle": {}, + "settingsSystemDefault": "ಸಿಸ್ಟಮ್ ಡೀಫಾಲ್ಟ್", + "@settingsSystemDefault": {}, + "settingsAskEverytime": "ಪ್ರತಿಬಾರಿಯೂ ಕೇಳಿ", + "@settingsAskEverytime": {}, + "settingsModificationWarningDialogMessage": "ಇತರ ಸಂಯೋಜನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲಾಗುತ್ತದೆ.", + "@settingsModificationWarningDialogMessage": {}, + "settingsConfirmationBeforeDeleteItems": "ವಸ್ತುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುವ ಮೊದಲು ವಿಚಾರಿಸಿ", + "@settingsConfirmationBeforeDeleteItems": {}, + "settingsSubtitleThemePageTitle": "ಅಡಿಬರಹ", + "@settingsSubtitleThemePageTitle": {}, + "settingsSubtitleThemeSample": "ಇದು ಒಂದು ನಮೂನೆ.", + "@settingsSubtitleThemeSample": {}, + "settingsSubtitleThemeTextAlignmentTile": "ಪಠ್ಯ ಜೋಡಣೆ", + "@settingsSubtitleThemeTextAlignmentTile": {}, + "settingsSubtitleThemeTextPositionTile": "ಪಠ್ಯ ಸ್ಥಾನ", + "@settingsSubtitleThemeTextPositionTile": {}, + "settingsPrivacySectionTitle": "ಗೌಪ್ಯತೆ", + "@settingsPrivacySectionTitle": {}, + "viewerInfoLabelUri": "ಯು ಆರ್ ಐ", + "@viewerInfoLabelUri": {}, + "viewerInfoLabelPath": "ಹಾದಿ", + "@viewerInfoLabelPath": {}, + "viewerInfoLabelAddress": "ವಿಳಾಸ", + "@viewerInfoLabelAddress": {}, + "mapPointNorthUpTooltip": "ಉತ್ತರದಿಕ್ಕನ್ನು ಮೇಲ್ಮುಖವಾಗಿ ಸೂಚಿಸು", + "@mapPointNorthUpTooltip": {}, + "mapAttributionOsmLiberty": "ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • ಆಶ್ರಯದಾತರು [OSM Americana](https://tile.ourmap.us)", + "@mapAttributionOsmLiberty": {}, + "mapAttributionOsmHot": "ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [HOT](https://www.hotosm.org/) • ಆಶ್ರಯದಾತರು [OSM France](https://openstreetmap.fr/)", + "@mapAttributionOsmHot": {}, + "mapEmptyRegion": "ಈ ಪ್ರದೇಶದಲ್ಲಿ ಯಾವುದೇ ಚಿತ್ರಗಳಿಲ್ಲ", + "@mapEmptyRegion": {}, + "settingsStorageAccessBanner": "ಕೆಲವು ಕೋಶಗಳಿಗೆ ಕಡತಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸ್ಪಷ್ಟ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುವ ಅಗತ್ಯವಿದೆ. ನೀವು ಈ ಹಿಂದೆ ಪ್ರವೇಶವನ್ನು ನೀಡಿದ ಕೋಶಗಳನ್ನು ನೀವು ಇಲ್ಲಿ ಪರಿಶೀಲಿಸಬಹುದು.", + "@settingsStorageAccessBanner": {}, + "settingsStorageAccessEmpty": "ಪ್ರವೇಶ ಅನುಮತಿಸಿಲ್ಲ", + "@settingsStorageAccessEmpty": {}, + "settingsThemeEnableDynamicColor": "ಡೈನಾಮಿಕ್ ಬಣ್ಣ", + "@settingsThemeEnableDynamicColor": {}, + "viewerErrorDoesNotExist": "ಕಡತವು ಇನ್ಮುಂದೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.", + "@viewerErrorDoesNotExist": {}, + "viewerInfoOpenEmbeddedFailureFeedback": "ಹುದುಗಿಸಿದ ದತ್ತಾಂಶವನ್ನು ಹೊರತೆಗೆಯಲು ವಿಫಲವಾಗಿದೆ", + "@viewerInfoOpenEmbeddedFailureFeedback": {}, + "viewerInfoSearchFieldLabel": "ಹುದುಗಿಸಿದ ದತ್ತಾಂಶವನ್ನು ಹುಡುಕಿ", + "@viewerInfoSearchFieldLabel": {}, + "filePickerNoItems": "ವಸ್ತುಗಳಿಲ್ಲ", + "@filePickerNoItems": {}, + "viewerInfoLabelSize": "ಪ್ರಮಾಣ", + "@viewerInfoLabelSize": {}, + "menuActionStats": "ಅಂಕಿಅಂಶಗಳು", + "@menuActionStats": {}, + "menuActionMap": "ನಕ್ಷೆ", + "@menuActionMap": {}, + "viewDialogSortSectionTitle": "ವಿಂಗಡಿಸಿ", + "@viewDialogSortSectionTitle": {}, + "viewDialogGroupSectionTitle": "ಗುಂಪು", + "@viewDialogGroupSectionTitle": {}, + "aboutBugCopyInfoInstruction": "ಸಾಧನದ ಮಾಹಿತಿಯನ್ನು ನಕಲಿಸಿ", + "@aboutBugCopyInfoInstruction": {}, + "aboutDataUsageInternal": "ಆಂತರಿಕ", + "@aboutDataUsageInternal": {}, + "aboutDataUsageExternal": "ಬಾಹ್ಯ", + "@aboutDataUsageExternal": {}, + "aboutDataUsageClearCache": "ಕ್ಯಾಶೆ ಸಂಗ್ರಹ ಅಳಿಸಿ", + "@aboutDataUsageClearCache": {}, + "aboutCreditsWorldAtlas2": "ISC ಪರವಾನಗಿ ಅಡಿಯಲ್ಲಿ.", + "@aboutCreditsWorldAtlas2": {}, + "collectionActionSetHome": "ಮುಖಪುಟವಾಗಿ ಹೊಂದಿಸಿ", + "@collectionActionSetHome": {}, + "collectionActionCopy": "ಆಲ್ಬಮ್‌ಗೆ ನಕಲಿಸಿ", + "@collectionActionCopy": {}, + "collectionGroupMonth": "ತಿಂಗಳಿನಂತೆ", + "@collectionGroupMonth": {}, + "collectionActionRescan": "ಪುನಃ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ", + "@collectionActionRescan": {}, + "collectionSearchTitlesHintText": "ಶೀರ್ಷಿಕೆಗಳನ್ನು ಹುಡುಕಿ", + "@collectionSearchTitlesHintText": {}, + "collectionGroupAlbum": "ಆಲ್ಬಮ್ ನಂತೆ", + "@collectionGroupAlbum": {}, + "collectionGroupDay": "ದಿನದಂತೆ", + "@collectionGroupDay": {}, + "collectionGroupNone": "ಗುಂಪು ಮಾಡಬೇಡಿ", + "@collectionGroupNone": {}, + "collectionMoveSuccessFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ}}", + "@collectionMoveSuccessFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "collectionEmptyImages": "ಚಿತ್ರಗಳಿಲ್ಲ", + "@collectionEmptyImages": {}, + "collectionEditSuccessFeedback": "{count, plural, =1{1 ವಸ್ತುವನ್ನು ಸಂಪಾದಿಸಲಾಗಿದೆ} other{{count} ವಸ್ತುಗಳನ್ನು ಸಂಪಾದಿಸಲಾಗಿದೆ}}", + "@collectionEditSuccessFeedback": { + "placeholders": { + "count": { + "type": "int", + "format": "decimalPattern" + } + } + }, + "collectionDeselectSectionTooltip": "ವಿಭಾಗ ಆಯ್ಕೆ ರದ್ದುಮಾಡಿ", + "@collectionDeselectSectionTooltip": {}, + "drawerCollectionAll": "ಎಲ್ಲಾ ಸಂಗ್ರಹ", + "@drawerCollectionAll": {}, + "drawerCollectionFavourites": "ಮೆಚ್ಚಿನವುಗಳು", + "@drawerCollectionFavourites": {}, + "sortOrderLargestFirst": "ದೊಡ್ಡದು ಮೊದಲು", + "@sortOrderLargestFirst": {}, + "sortOrderSmallestFirst": "ಚಿಕ್ಕದು ಮೊದಲು", + "@sortOrderSmallestFirst": {}, + "sortOrderShortestFirst": "ಗಿಡ್ಡದ್ದು ಮೊದಲು", + "@sortOrderShortestFirst": {}, + "albumGroupTier": "ಶ್ರೇಣಿಯಂತೆ", + "@albumGroupTier": {}, + "albumPickPageTitleCopy": "ಆಲ್ಬಮ್‌ಗೆ ನಕಲಿಸಿ", + "@albumPickPageTitleCopy": {}, + "albumPickPageTitleExport": "ಆಲ್ಬಮ್‌ಗೆ ರಫ್ತು ಮಾಡಿ", + "@albumPickPageTitleExport": {}, + "albumScreenshots": "ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳು", + "@albumScreenshots": {}, + "albumPickPageTitleMove": "ಆಲ್ಬಮ್‌ಗೆ ಸ್ಥಳಾಂತರಿಸಿ", + "@albumPickPageTitleMove": {}, + "settingsThumbnailSectionTitle": "ಥಂಬ್‌ನೇಲ್‌ಗಳು", + "@settingsThumbnailSectionTitle": {}, + "settingsNavigationDrawerEditorPageTitle": "ನ್ಯಾವಿಗೇಷನ್ ಮೆನು", + "@settingsNavigationDrawerEditorPageTitle": {}, + "settingsThumbnailShowTagIcon": "ಟ್ಯಾಗು ಸಂಕೇತ ತೋರಿಸಿ", + "@settingsThumbnailShowTagIcon": {}, + "settingsDisablingBinWarningDialogMessage": "ಮರುಬಳಕೆ ತೊಟ್ಟಿಯಲ್ಲಿರುವ ವಸ್ತುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತಿದೆ.", + "@settingsDisablingBinWarningDialogMessage": {}, + "settingsAccessibilitySectionTitle": "ಎಟುಕು", + "@settingsAccessibilitySectionTitle": {}, + "settingsSubtitleThemeTile": "ಅಡಿಬರಹ", + "@settingsSubtitleThemeTile": {}, + "settingsSubtitleThemeTextColor": "ಪಠ್ಯದ ಬಣ್ಣ", + "@settingsSubtitleThemeTextColor": {}, + "settingsSubtitleThemeBackgroundColor": "ಹಿನ್ನೆಲೆ ಬಣ್ಣ", + "@settingsSubtitleThemeBackgroundColor": {}, + "settingsHiddenItemsPageTitle": "ಮರೆಮಾಡಿದ ವಸ್ತುಗಳು", + "@settingsHiddenItemsPageTitle": {}, + "tagPlaceholderCountry": "ದೇಶ", + "@tagPlaceholderCountry": {}, + "tagPlaceholderState": "ರಾಜ್ಯ", + "@tagPlaceholderState": {}, + "viewDialogReverseSortOrder": "ಹಿಮ್ಮುಖ ವಿಂಗಡಣೆ ಕ್ರಮ", + "@viewDialogReverseSortOrder": {}, + "tileLayoutMosaic": "ಮೊಸಾಯಿಕ್", + "@tileLayoutMosaic": {}, + "coverDialogTabCover": "ರಕ್ಷಾಕವಚ", + "@coverDialogTabCover": {}, + "albumScreenRecordings": "ಪರದೆ ಮುದ್ರಿಕೆಗಳು", + "@albumScreenRecordings": {}, + "albumPageTitle": "ಆಲ್ಬಮ್ ಗಳು", + "@albumPageTitle": {}, + "settingsViewerQuickActionEditorPageTitle": "ತ್ವರಿತ ಕ್ರಮಗಳು", + "@settingsViewerQuickActionEditorPageTitle": {}, + "settingsViewerQuickActionEditorDisplayedButtonsSectionTitle": "ಪ್ರದರ್ಶಿತ ಗುಂಡಿಗಳು", + "@settingsViewerQuickActionEditorDisplayedButtonsSectionTitle": {}, + "settingsVideoAutoPlay": "ಸ್ವಯಂ ಚಾಲನೆ", + "@settingsVideoAutoPlay": {}, + "statsPageTitle": "ಅಂಕಿಅಂಶಗಳು", + "@statsPageTitle": {}, + "viewerInfoLabelTitle": "ಶೀರ್ಷಿಕೆ", + "@viewerInfoLabelTitle": {}, + "statsTopPlacesSectionTitle": "ಅಗ್ರ ಸ್ಥಳಗಳು", + "@statsTopPlacesSectionTitle": {}, + "sortOrderZtoA": "ವರ್ಣಮಾಲೆಯ ವಿರುದ್ಧವಾಗಿ (Z to A)", + "@sortOrderZtoA": {}, + "settingsCollectionQuickActionTabSelecting": "ಆರಿಸು", + "@settingsCollectionQuickActionTabSelecting": {}, + "settingsCollectionBurstPatternsTile": "ಬರ್ಸ್ಟ್ ಪ್ರಕಾರಗಳು", + "@settingsCollectionBurstPatternsTile": {}, + "settingsCollectionBurstPatternsNone": "ಏನಿಲ್ಲ", + "@settingsCollectionBurstPatternsNone": {}, + "settingsViewerMaximumBrightness": "ಗರಿಷ್ಟ ಪ್ರಕಾಶಮಯ", + "@settingsViewerMaximumBrightness": {}, + "settingsViewerQuickActionsTile": "ತ್ವರಿತ ಕ್ರಮಗಳು", + "@settingsViewerQuickActionsTile": {}, + "settingsStorageAccessPageTitle": "ಸಂಗ್ರಹಣೆ ಪ್ರವೇಶಾಧಿಕಾರ", + "@settingsStorageAccessPageTitle": {}, + "settingsHiddenFiltersEmpty": "ಮರೆಮಾಡಿದ ಫಿಲ್ಟರ್‌ಗಳಿಲ್ಲ", + "@settingsHiddenFiltersEmpty": {}, + "settingsStorageAccessTile": "ಸಂಗ್ರಹಣೆ ಪ್ರವೇಶಾಧಿಕಾರ", + "@settingsStorageAccessTile": {}, + "settingsWidgetPageTitle": "ಚಿತ್ರ ಚೌಕಟ್ಟು", + "@settingsWidgetPageTitle": {}, + "viewerInfoSearchSuggestionResolution": "ಅಳತೆ", + "@viewerInfoSearchSuggestionResolution": {}, + "filterRecentlyAddedLabel": "ಇತ್ತೀಚಿಗೆ ಸೇರಿಸಿದ್ದು", + "@filterRecentlyAddedLabel": {}, + "filterRatingRejectedLabel": "ತಿರಸ್ಕರಿಸಿದ್ದು", + "@filterRatingRejectedLabel": {}, + "tileLayoutGrid": "ಜಾಲ", + "@tileLayoutGrid": {}, + "settingsSubtitleThemeTextSize": "ಪಠ್ಯದ ಗಾತ್ರ", + "@settingsSubtitleThemeTextSize": {}, + "settingsSubtitleThemeTextOpacity": "ಪಠ್ಯದ ಪಾರದರ್ಶಕತೆ", + "@settingsSubtitleThemeTextOpacity": {}, + "settingsSubtitleThemeBackgroundOpacity": "ಹಿನ್ನೆಲೆ ಪಾರದರ್ಶಕತೆ", + "@settingsSubtitleThemeBackgroundOpacity": {}, + "settingsStorageAccessRevokeTooltip": "ಹಿಂಪಡೆಯಿರಿ", + "@settingsStorageAccessRevokeTooltip": {}, + "settingsHiddenFiltersBanner": "ಮರೆಮಾಡಿದ ಫಿಲ್ಟರ್‌ಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗುವ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು ನಿಮ್ಮ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಗೋಚರಿಸುವುದಿಲ್ಲ.", + "@settingsHiddenFiltersBanner": {}, + "settingsScreenSaverPageTitle": "ಪರದೆ ರಕ್ಷಕ", + "@settingsScreenSaverPageTitle": {} } diff --git a/lib/l10n/app_zh_Hant.arb b/lib/l10n/app_zh_Hant.arb index ff3175b41..186376b54 100644 --- a/lib/l10n/app_zh_Hant.arb +++ b/lib/l10n/app_zh_Hant.arb @@ -1605,7 +1605,7 @@ "@mapStyleOsmLiberty": {}, "mapStyleOpenTopoMap": "OpenTopoMap", "@mapStyleOpenTopoMap": {}, - "mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | 地圖由 [OpenTopoMap](https://opentopomap.org/),以 [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/) 授權", + "mapAttributionOpenTopoMap": "[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | 地圖由 [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)", "@mapAttributionOpenTopoMap": {}, "sortByDuration": "按時長", "@sortByDuration": {} diff --git a/lib/l10ngen/app_localizations_da.dart b/lib/l10ngen/app_localizations_da.dart index 1befd120b..36737cbef 100644 --- a/lib/l10ngen/app_localizations_da.dart +++ b/lib/l10ngen/app_localizations_da.dart @@ -315,7 +315,7 @@ class AppLocalizationsDa extends AppLocalizations { String get entryActionRemoveFavourite => 'Fjern fra favoritter'; @override - String get videoActionCaptureFrame => 'Capture frame'; + String get videoActionCaptureFrame => 'Tag billede af frame'; @override String get videoActionMute => 'Slå lyden fra'; @@ -336,19 +336,19 @@ class AppLocalizationsDa extends AppLocalizations { String get videoActionSkip10 => 'Spol 10 sekunder frem'; @override - String get videoActionShowPreviousFrame => 'Show previous frame'; + String get videoActionShowPreviousFrame => 'Vis forrige frame'; @override - String get videoActionShowNextFrame => 'Show next frame'; + String get videoActionShowNextFrame => 'Vis næste frame'; @override - String get videoActionSelectStreams => 'Select tracks'; + String get videoActionSelectStreams => 'Vælg spor'; @override String get videoActionSetSpeed => 'Afspilningshastighed'; @override - String get videoActionABRepeat => 'A-B repeat'; + String get videoActionABRepeat => 'A-B gentagelse'; @override String get videoRepeatActionSetStart => 'Sæt start'; @@ -360,10 +360,10 @@ class AppLocalizationsDa extends AppLocalizations { String get viewerActionSettings => 'Indstillinger'; @override - String get viewerActionLock => 'Lock viewer'; + String get viewerActionLock => 'Lås fremviser'; @override - String get viewerActionUnlock => 'Unlock viewer'; + String get viewerActionUnlock => 'Oplås fremviser'; @override String get slideshowActionResume => 'Genoptag'; @@ -548,7 +548,7 @@ class AppLocalizationsDa extends AppLocalizations { String get keepScreenOnVideoPlayback => 'Under videoafspilning'; @override - String get keepScreenOnViewerOnly => 'Viewer page only'; + String get keepScreenOnViewerOnly => 'Kun fremvisningsside'; @override String get keepScreenOnAlways => 'Altid'; @@ -575,7 +575,7 @@ class AppLocalizationsDa extends AppLocalizations { String get mapStyleOpenTopoMap => 'OpenTopoMap'; @override - String get mapStyleOsmHot => 'Humanitarian OSM'; + String get mapStyleOsmHot => 'Humanitært OSM'; @override String get mapStyleStamenWatercolor => 'Stamen Watercolor'; @@ -701,7 +701,7 @@ class AppLocalizationsDa extends AppLocalizations { String get widgetOpenPageCollection => 'Åbn samling'; @override - String get widgetOpenPageViewer => 'Open viewer'; + String get widgetOpenPageViewer => 'Åbn fremviser'; @override String get widgetTapUpdateWidget => 'Opdater widget'; @@ -756,7 +756,7 @@ class AppLocalizationsDa extends AppLocalizations { String get nameConflictDialogMultipleSourceMessage => 'Nogle filer har samme navn.'; @override - String get addShortcutDialogLabel => 'Shortcut label'; + String get addShortcutDialogLabel => 'Genvejsetiket'; @override String get addShortcutButtonLabel => 'TILFØJ'; @@ -793,7 +793,7 @@ class AppLocalizationsDa extends AppLocalizations { } @override - String get moveUndatedConfirmationDialogMessage => 'Save item dates before proceeding?'; + String get moveUndatedConfirmationDialogMessage => 'Gem elementdatoer, før du fortsætter?'; @override String get moveUndatedConfirmationDialogSetDate => 'Gem datoer'; @@ -976,10 +976,10 @@ class AppLocalizationsDa extends AppLocalizations { String get editEntryDateDialogExtractFromTitle => 'Udtræk fra titel'; @override - String get editEntryDateDialogShift => 'Shift'; + String get editEntryDateDialogShift => 'Skift'; @override - String get editEntryDateDialogSourceFileModifiedDate => 'File modified date'; + String get editEntryDateDialogSourceFileModifiedDate => 'Filens ændringsdato'; @override String get durationDialogHours => 'Timer'; @@ -1000,7 +1000,7 @@ class AppLocalizationsDa extends AppLocalizations { String get editEntryLocationDialogChooseOnMap => 'Vælg på kort'; @override - String get editEntryLocationDialogImportGpx => 'Import GPX'; + String get editEntryLocationDialogImportGpx => 'Importér GPX'; @override String get editEntryLocationDialogLatitude => 'Breddegrad'; @@ -1009,7 +1009,7 @@ class AppLocalizationsDa extends AppLocalizations { String get editEntryLocationDialogLongitude => 'Længdegrad'; @override - String get editEntryLocationDialogTimeShift => 'Time shift'; + String get editEntryLocationDialogTimeShift => 'Tidsskift'; @override String get locationPickerUseThisLocationButton => 'Brug denne placering'; @@ -1021,7 +1021,7 @@ class AppLocalizationsDa extends AppLocalizations { String get removeEntryMetadataDialogTitle => 'Fjernelse af metadata'; @override - String get removeEntryMetadataDialogAll => 'All'; + String get removeEntryMetadataDialogAll => 'Alle'; @override String get removeEntryMetadataDialogMore => 'Mere'; @@ -1045,10 +1045,10 @@ class AppLocalizationsDa extends AppLocalizations { String get videoStreamSelectionDialogOff => 'Fra'; @override - String get videoStreamSelectionDialogTrack => 'Track'; + String get videoStreamSelectionDialogTrack => 'Spor'; @override - String get videoStreamSelectionDialogNoSelection => 'There are no other tracks.'; + String get videoStreamSelectionDialogNoSelection => 'Der er ingen andre spor.'; @override String get genericSuccessFeedback => 'Færdig!'; @@ -1174,7 +1174,7 @@ class AppLocalizationsDa extends AppLocalizations { String get aboutDataUsageClearCache => 'Ryd cache'; @override - String get aboutCreditsSectionTitle => 'Credits'; + String get aboutCreditsSectionTitle => 'Kreditering'; @override String get aboutCreditsWorldAtlas1 => 'Denne app bruger en TopoJSON-fil fra'; @@ -1428,10 +1428,10 @@ class AppLocalizationsDa extends AppLocalizations { String get collectionEmptyGrantAccessButtonLabel => 'Giv adgang'; @override - String get collectionSelectSectionTooltip => 'Select section'; + String get collectionSelectSectionTooltip => 'Vælg sektion'; @override - String get collectionDeselectSectionTooltip => 'Deselect section'; + String get collectionDeselectSectionTooltip => 'Fravælg sektion'; @override String get drawerAboutButton => 'Om'; @@ -1440,7 +1440,7 @@ class AppLocalizationsDa extends AppLocalizations { String get drawerSettingsButton => 'Indstillinger'; @override - String get drawerCollectionAll => 'All collection'; + String get drawerCollectionAll => 'Alle samlinger'; @override String get drawerCollectionFavourites => 'Favoritter'; @@ -1530,7 +1530,7 @@ class AppLocalizationsDa extends AppLocalizations { String get sortOrderLongestFirst => 'Længste først'; @override - String get albumGroupTier => 'By tier'; + String get albumGroupTier => 'Efter kategori'; @override String get albumGroupType => 'Efter type'; @@ -1542,7 +1542,7 @@ class AppLocalizationsDa extends AppLocalizations { String get albumGroupNone => 'Gruppér ikke'; @override - String get albumMimeTypeMixed => 'Mixed'; + String get albumMimeTypeMixed => 'Blandet'; @override String get albumPickPageTitleCopy => 'Kopiér til album'; @@ -1794,7 +1794,7 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsThumbnailShowRawIcon => 'Vis RAW-ikon'; @override - String get settingsThumbnailShowVideoDuration => 'Show video duration'; + String get settingsThumbnailShowVideoDuration => 'Vis videovarighed'; @override String get settingsCollectionQuickActionsTile => 'Hurtighandlinger'; @@ -1806,7 +1806,7 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsCollectionQuickActionTabBrowsing => 'Browsing'; @override - String get settingsCollectionQuickActionTabSelecting => 'Selecting'; + String get settingsCollectionQuickActionTabSelecting => 'Valg'; @override String get settingsCollectionBrowsingQuickActionEditorBanner => 'Tryk og hold for at flytte knapper og vælge, hvilke handlinger der vises, når du gennemser elementer.'; @@ -1815,13 +1815,13 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsCollectionSelectionQuickActionEditorBanner => 'Tryk og hold for at flytte knapper og vælge, hvilke handlinger der vises, når du vælger elementer.'; @override - String get settingsCollectionBurstPatternsTile => 'Burst patterns'; + String get settingsCollectionBurstPatternsTile => 'Filnavnmønstre'; @override String get settingsCollectionBurstPatternsNone => 'Ingen'; @override - String get settingsViewerSectionTitle => 'Viewer'; + String get settingsViewerSectionTitle => 'Fremviser'; @override String get settingsViewerGestureSideTapNext => 'Tryk på skærmkanterne for at vise forrige/næste element'; @@ -1845,7 +1845,7 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsViewerQuickActionEditorPageTitle => 'Hurtighandlinger'; @override - String get settingsViewerQuickActionEditorBanner => 'Touch and hold to move buttons and select which actions are displayed in the viewer.'; + String get settingsViewerQuickActionEditorBanner => 'Tryk og hold for at flytte knapper og vælge, hvilke handlinger der vises i fremviseren.'; @override String get settingsViewerQuickActionEditorDisplayedButtonsSectionTitle => 'Viste knapper'; @@ -1938,7 +1938,7 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsVideoPlaybackPageTitle => 'Afspilning'; @override - String get settingsVideoEnableHardwareAcceleration => 'Hardware acceleration'; + String get settingsVideoEnableHardwareAcceleration => 'Hardwareacceleration'; @override String get settingsVideoAutoPlay => 'Afspil automatisk'; @@ -2031,7 +2031,7 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsPrivacySectionTitle => 'Privatliv'; @override - String get settingsAllowInstalledAppAccess => 'Allow access to app inventory'; + String get settingsAllowInstalledAppAccess => 'Tillad adgang til app-lager'; @override String get settingsAllowInstalledAppAccessSubtitle => 'Bruges til at forbedre albumvisning'; @@ -2106,7 +2106,7 @@ class AppLocalizationsDa extends AppLocalizations { String get settingsThemeBrightnessDialogTitle => 'Tema'; @override - String get settingsThemeColorHighlights => 'Color highlights'; + String get settingsThemeColorHighlights => 'Farvemarkeringer'; @override String get settingsThemeEnableDynamicColor => 'Dynamisk farve'; @@ -2210,7 +2210,7 @@ class AppLocalizationsDa extends AppLocalizations { String get viewerInfoPageTitle => 'Info'; @override - String get viewerInfoBackToViewerTooltip => 'Back to viewer'; + String get viewerInfoBackToViewerTooltip => 'Tilbage til fremviser'; @override String get viewerInfoUnknown => 'ukendt'; @@ -2279,7 +2279,7 @@ class AppLocalizationsDa extends AppLocalizations { String get mapAttributionStamen => 'Fliser af [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)'; @override - String get openMapPageTooltip => 'View on Map page'; + String get openMapPageTooltip => 'Se på kortside'; @override String get mapEmptyRegion => 'Ingen billeder i denne region'; @@ -2297,7 +2297,7 @@ class AppLocalizationsDa extends AppLocalizations { String get viewerInfoSearchFieldLabel => 'Søg i metadata'; @override - String get viewerInfoSearchEmpty => 'No matching keys'; + String get viewerInfoSearchEmpty => 'Ingen matchende nøgler'; @override String get viewerInfoSearchSuggestionDate => 'Dato og tid'; @@ -2315,7 +2315,7 @@ class AppLocalizationsDa extends AppLocalizations { String get viewerInfoSearchSuggestionRights => 'Rettigheder'; @override - String get wallpaperUseScrollEffect => 'Use scroll effect on home screen'; + String get wallpaperUseScrollEffect => 'Brug rulleeffekt på startside'; @override String get tagEditorPageTitle => 'Rediger Tags'; diff --git a/lib/l10ngen/app_localizations_de.dart b/lib/l10ngen/app_localizations_de.dart index 130036c7f..406ef5ea3 100644 --- a/lib/l10ngen/app_localizations_de.dart +++ b/lib/l10ngen/app_localizations_de.dart @@ -1006,7 +1006,7 @@ class AppLocalizationsDe extends AppLocalizations { String get editEntryLocationDialogLongitude => 'Längengrad'; @override - String get editEntryLocationDialogTimeShift => 'Time shift'; + String get editEntryLocationDialogTimeShift => 'Zeitverschiebung'; @override String get locationPickerUseThisLocationButton => 'Diesen Standort verwenden'; @@ -1018,7 +1018,7 @@ class AppLocalizationsDe extends AppLocalizations { String get removeEntryMetadataDialogTitle => 'Entfernung von Metadaten'; @override - String get removeEntryMetadataDialogAll => 'All'; + String get removeEntryMetadataDialogAll => 'Alle'; @override String get removeEntryMetadataDialogMore => 'Mehr'; diff --git a/lib/l10ngen/app_localizations_kn.dart b/lib/l10ngen/app_localizations_kn.dart index 263a0122c..3b7c736e8 100644 --- a/lib/l10ngen/app_localizations_kn.dart +++ b/lib/l10ngen/app_localizations_kn.dart @@ -9,10 +9,10 @@ class AppLocalizationsKn extends AppLocalizations { AppLocalizationsKn([String locale = 'kn']) : super(locale); @override - String get appName => 'Aves'; + String get appName => 'ಎವೀಸ್'; @override - String get welcomeMessage => 'Aves ಗೆ ಸ್ವಾಗತ'; + String get welcomeMessage => 'ಎವೀಸ್ ಗೆ ಸ್ವಾಗತ'; @override String get welcomeOptional => 'ಐಚ್ಛಿಕ'; @@ -28,8 +28,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$countString items', - one: '$countString item', + other: '$countString ವಸ್ತುಗಳು', + one: '$countString ವಸ್ತು', ); return '$_temp0'; } @@ -42,8 +42,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$countString columns', - one: '$countString column', + other: '$countString ಕಂಬಸಾಲುಗಳು', + one: '$countString ಕಂಬಸಾಲು', ); return '$_temp0'; } @@ -56,8 +56,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$countString seconds', - one: '$countString second', + other: '$countString ಕ್ಷಣಗಳು', + one: '$countString ಕ್ಷಣ', ); return '$_temp0'; } @@ -70,8 +70,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$countString minutes', - one: '$countString minute', + other: '$countString ನಿಮಿಷಗಳು', + one: '$countString ನಿಮಿಷ', ); return '$_temp0'; } @@ -84,15 +84,15 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$countString days', - one: '$countString day', + other: '$countString ದಿನಗಳು', + one: '$countString ದಿನ', ); return '$_temp0'; } @override String focalLength(String length) { - return '$length mm'; + return '$length ಮಿಮಿ'; } @override @@ -108,7 +108,7 @@ class AppLocalizationsKn extends AppLocalizations { String get showButtonLabel => 'ತೋರಿಸು'; @override - String get hideButtonLabel => 'ಮುಚ್ಚಿಡು'; + String get hideButtonLabel => 'ಅಡಗಿಸು'; @override String get continueButtonLabel => 'ಮುಂದುವರಿಸು'; @@ -123,10 +123,10 @@ class AppLocalizationsKn extends AppLocalizations { String get cancelTooltip => 'ರದ್ದುಗೊಳಿಸಿ'; @override - String get changeTooltip => 'ಬದಲಾಯಿಸು'; + String get changeTooltip => 'ಬದಲಿಸು'; @override - String get clearTooltip => 'ಸ್ಪಷ್ಟ ಮಾಡು'; + String get clearTooltip => 'ಖಾಲಿ ಮಾಡು'; @override String get previousTooltip => 'ಹಿಂದಿನ'; @@ -150,13 +150,13 @@ class AppLocalizationsKn extends AppLocalizations { String get saveTooltip => 'ಉಳಿಸಿ'; @override - String get stopTooltip => 'Stop'; + String get stopTooltip => 'ನಿಲ್ಲಿಸು'; @override String get pickTooltip => 'ಆಯ್ಕೆ'; @override - String get doubleBackExitMessage => 'ನಿರ್ಗಮಿಸಲು ಮತ್ತೆ \"ಹಿಂದೆ\" ಟ್ಯಾಪ್ ಮಾಡಿ.'; + String get doubleBackExitMessage => 'ನಿರ್ಗಮಿಸಲು ಮತ್ತೊಮ್ಮೆ “ಹಿಂದೆ” ಒತ್ತಿ.'; @override String get doNotAskAgain => 'ಇನ್ನೊಮ್ಮೆ ಕೇಳಬೇಡಿ'; @@ -177,337 +177,337 @@ class AppLocalizationsKn extends AppLocalizations { String get chipActionDelete => 'ಅಳಿಸಿ'; @override - String get chipActionRemove => 'Remove'; + String get chipActionRemove => 'ತೆಗೆದುಹಾಕು'; @override - String get chipActionShowCollection => 'Show in Collection'; + String get chipActionShowCollection => 'ಸಂಗ್ರಹದಲ್ಲಿ ತೋರಿಸು'; @override String get chipActionGoToAlbumPage => 'ಆಲ್ಬಮ್‌ಗಳಲ್ಲಿ ತೋರಿಸು'; @override - String get chipActionGoToCountryPage => 'Show in Countries'; + String get chipActionGoToCountryPage => 'ದೇಶಗಳಲ್ಲಿ ತೋರಿಸು'; @override - String get chipActionGoToPlacePage => 'Show in Places'; + String get chipActionGoToPlacePage => 'ಸ್ಥಳಗಳಲ್ಲಿ ತೋರಿಸು'; @override - String get chipActionGoToTagPage => 'Show in Tags'; + String get chipActionGoToTagPage => 'Tagಗಳಲ್ಲಿ ತೋರಿಸು'; @override - String get chipActionGoToExplorerPage => 'Show in Explorer'; + String get chipActionGoToExplorerPage => 'ಪರಿಶೋಧಕದಲ್ಲಿ ತೋರಿಸು'; @override - String get chipActionDecompose => 'Split'; + String get chipActionDecompose => 'ವಿಭಜಿಸು'; @override - String get chipActionFilterOut => 'Filter out'; + String get chipActionFilterOut => 'ಪ್ರತ್ಯೇಕಿಸು'; @override - String get chipActionFilterIn => 'Filter in'; + String get chipActionFilterIn => 'ಶೋಧಿಸು'; @override - String get chipActionHide => 'Hide'; + String get chipActionHide => 'ಅಡಗಿಸು'; @override - String get chipActionLock => 'Lock'; + String get chipActionLock => 'ಬಂಧಿಸು'; @override - String get chipActionPin => 'Pin to top'; + String get chipActionPin => 'ಮೇಲೆ ಸಿಕ್ಕಿಸು'; @override - String get chipActionUnpin => 'Unpin from top'; + String get chipActionUnpin => 'ಪಿನ್ ತೆಗೆಯಿರಿ'; @override - String get chipActionRename => 'Rename'; + String get chipActionRename => 'ಮರುನಾಮಕರಣ'; @override - String get chipActionSetCover => 'Set cover'; + String get chipActionSetCover => 'ರಕ್ಷಾಕವಚ ಹೊಂದಿಸು'; @override - String get chipActionShowCountryStates => 'Show states'; + String get chipActionShowCountryStates => 'ಅಂಕಿಅಂಶಗಳನ್ನು ತೋರಿಸಿ'; @override - String get chipActionCreateAlbum => 'Create album'; + String get chipActionCreateAlbum => 'ಆಲ್ಬಮ್ ರಚಿಸಿ'; @override - String get chipActionCreateVault => 'Create vault'; + String get chipActionCreateVault => 'ನೆಲಮಾಳಿಗೆ ರಚಿಸಿ'; @override - String get chipActionConfigureVault => 'Configure vault'; + String get chipActionConfigureVault => 'ನೆಲಮಾಳಿಗೆ ಸಂರಚಿಸಿ'; @override - String get entryActionCopyToClipboard => 'Copy to clipboard'; + String get entryActionCopyToClipboard => 'ಕ್ಲಿಪ್‌ಬೋರ್ಡ್ ಗೆ ನಕಲಿಸಿ'; @override - String get entryActionDelete => 'Delete'; + String get entryActionDelete => 'ಅಳಿಸಿ'; @override - String get entryActionConvert => 'Convert'; + String get entryActionConvert => 'ಪರಿವರ್ತಿಸಿ'; @override - String get entryActionExport => 'Export'; + String get entryActionExport => 'ರಫ್ತು'; @override - String get entryActionInfo => 'Info'; + String get entryActionInfo => 'ಮಾಹಿತಿ'; @override - String get entryActionRename => 'Rename'; + String get entryActionRename => 'ಮರುನಾಮಕರಣ'; @override - String get entryActionRestore => 'Restore'; + String get entryActionRestore => 'ಮರುಸ್ಥಾಪಿಸಿ'; @override - String get entryActionRotateCCW => 'Rotate counterclockwise'; + String get entryActionRotateCCW => 'ಅಪ್ರದಕ್ಷಿಣಾಕಾರವಾಗಿ ತಿರುಗಿಸಿ'; @override - String get entryActionRotateCW => 'Rotate clockwise'; + String get entryActionRotateCW => 'ಪ್ರದಕ್ಷಿಣಾಕಾರವಾಗಿ ತಿರುಗಿಸಿ'; @override - String get entryActionFlip => 'Flip horizontally'; + String get entryActionFlip => 'ಅಡ್ಡ ಮಗುಚು'; @override - String get entryActionPrint => 'Print'; + String get entryActionPrint => 'ಮುದ್ರಿಸು'; @override - String get entryActionShare => 'Share'; + String get entryActionShare => 'ಹಂಚಿಕೊಳ್ಳಿ'; @override - String get entryActionShareImageOnly => 'Share image only'; + String get entryActionShareImageOnly => 'ಚಿತ್ರವನ್ನು ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ'; @override - String get entryActionShareVideoOnly => 'Share video only'; + String get entryActionShareVideoOnly => 'ವಿಡಿಯೋವನ್ನು ಮಾತ್ರ ಹಂಚಿಕೊಳ್ಳಿ'; @override - String get entryActionViewSource => 'View source'; + String get entryActionViewSource => 'ಮೂಲವನ್ನು ನೋಡಿ'; @override - String get entryActionShowGeoTiffOnMap => 'Show as map overlay'; + String get entryActionShowGeoTiffOnMap => 'ನಕ್ಷೆಯ ಮೇಲ್ಪದರದಲ್ಲಿ ತೋರಿಸಿ'; @override - String get entryActionConvertMotionPhotoToStillImage => 'Convert to still image'; + String get entryActionConvertMotionPhotoToStillImage => 'ಸ್ಥಿರ ಚಿತ್ರವಾಗಿ ಮಾರ್ಪಡಿಸಿ'; @override - String get entryActionViewMotionPhotoVideo => 'Open video'; + String get entryActionViewMotionPhotoVideo => 'ವಿಡಿಯೋ ತೆರೆಯಿರಿ'; @override - String get entryActionEdit => 'Edit'; + String get entryActionEdit => 'ಸಂಪಾದಿಸಿ'; @override - String get entryActionOpen => 'Open with'; + String get entryActionOpen => '..ಇಂದ ತೆರೆಯಿರಿ'; @override - String get entryActionSetAs => 'Set as'; + String get entryActionSetAs => 'ಇದಾಗಿ ಸೆಟ್ ಮಾಡಿ'; @override - String get entryActionCast => 'Cast'; + String get entryActionCast => 'ಕ್ಯಾಸ್ಟ್'; @override - String get entryActionOpenMap => 'Show in map app'; + String get entryActionOpenMap => 'ನಕ್ಷೆಯ ಆಪ್ ನಲ್ಲಿ ತೋರಿಸಿ'; @override - String get entryActionRotateScreen => 'Rotate screen'; + String get entryActionRotateScreen => 'ಪರದೆಯನ್ನು ತಿರುಗಿಸಿ'; @override - String get entryActionAddFavourite => 'Add to favorites'; + String get entryActionAddFavourite => 'ನೆಚ್ಚಿನದಕ್ಕೆ ಸೇರಿಸಿ'; @override - String get entryActionRemoveFavourite => 'Remove from favorites'; + String get entryActionRemoveFavourite => 'ನೆಚ್ಚಿನವುಗಳಿಂದ ತೆಗೆಯಿರಿ'; @override - String get videoActionCaptureFrame => 'Capture frame'; + String get videoActionCaptureFrame => 'ಫ್ರೇಮ್ ಸೆರೆಹಿಡಿಯಿರಿ'; @override - String get videoActionMute => 'Mute'; + String get videoActionMute => 'ಸದ್ದಡಗಿಸಿ'; @override - String get videoActionUnmute => 'Unmute'; + String get videoActionUnmute => 'ಸದ್ದಾಗಿಸಿ'; @override - String get videoActionPause => 'Pause'; + String get videoActionPause => 'ತಾಳು'; @override - String get videoActionPlay => 'Play'; + String get videoActionPlay => 'ಪ್ಲೇ ಮಾಡಿ'; @override - String get videoActionReplay10 => 'Seek backward 10 seconds'; + String get videoActionReplay10 => '೧೦ ಕ್ಷಣ ಹಿಂದೆ ಓಡಿಸಿ'; @override - String get videoActionSkip10 => 'Seek forward 10 seconds'; + String get videoActionSkip10 => '೧೦ ಕ್ಷಣ ಮುಂದೆ ಓಡಿಸಿ'; @override - String get videoActionShowPreviousFrame => 'Show previous frame'; + String get videoActionShowPreviousFrame => 'ಹಿಂದಿನ ಫ್ರೇಮ್ ತೋರಿಸಿ'; @override - String get videoActionShowNextFrame => 'Show next frame'; + String get videoActionShowNextFrame => 'ಮುಂದಿನ ಫ್ರೇಮ್ ತೋರಿಸಿ'; @override - String get videoActionSelectStreams => 'Select tracks'; + String get videoActionSelectStreams => 'ಟ್ರ್ಯಾಕ್ ಆರಿಸಿ'; @override - String get videoActionSetSpeed => 'Playback speed'; + String get videoActionSetSpeed => 'ಚಲನೆಯ ವೇಗ'; @override - String get videoActionABRepeat => 'A-B repeat'; + String get videoActionABRepeat => 'A-B ಪುನರಾವರ್ತನೆ'; @override - String get videoRepeatActionSetStart => 'Set start'; + String get videoRepeatActionSetStart => 'ಪ್ರಾರಂಭವನ್ನು ಹೊಂದಿಸಿ'; @override - String get videoRepeatActionSetEnd => 'Set end'; + String get videoRepeatActionSetEnd => 'ಅಂತ್ಯವನ್ನು ಹೊಂದಿಸಿ'; @override - String get viewerActionSettings => 'Settings'; + String get viewerActionSettings => 'ಸಂಯೋಜನೆಗಳು'; @override - String get viewerActionLock => 'Lock viewer'; + String get viewerActionLock => 'ನೋಟವನ್ನು ಬಂಧಿಸಿ'; @override - String get viewerActionUnlock => 'Unlock viewer'; + String get viewerActionUnlock => 'ನೋಟವನ್ನು ಬಿಡುಗಡೆಗೊಳಿಸಿ'; @override - String get slideshowActionResume => 'Resume'; + String get slideshowActionResume => 'ಪುನರಾರಂಭಿಸಿ'; @override - String get slideshowActionShowInCollection => 'Show in Collection'; + String get slideshowActionShowInCollection => 'ಸಂಗ್ರಹದಲ್ಲಿ ತೋರಿಸಿ'; @override - String get entryInfoActionEditDate => 'Edit date & time'; + String get entryInfoActionEditDate => 'ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ತಿದ್ದಿ'; @override - String get entryInfoActionEditLocation => 'Edit location'; + String get entryInfoActionEditLocation => 'ಸ್ಥಳವನ್ನು ತಿದ್ದಿ'; @override - String get entryInfoActionEditTitleDescription => 'Edit title & description'; + String get entryInfoActionEditTitleDescription => 'ಶೀರ್ಷಿಕೆ ಮತ್ತು ವಿವರಣೆಯನ್ನು ತಿದ್ದಿ'; @override - String get entryInfoActionEditRating => 'Edit rating'; + String get entryInfoActionEditRating => 'ಮೌಲ್ಯವನ್ನು ತಿದ್ದಿ'; @override - String get entryInfoActionEditTags => 'Edit tags'; + String get entryInfoActionEditTags => 'Tagಗಳನ್ನು ತಿದ್ದಿ'; @override - String get entryInfoActionRemoveMetadata => 'Remove metadata'; + String get entryInfoActionRemoveMetadata => 'metadata ತೆಗೆಯಿರಿ'; @override - String get entryInfoActionExportMetadata => 'Export metadata'; + String get entryInfoActionExportMetadata => 'metadata ರಪ್ತು ಮಾಡಿ'; @override - String get entryInfoActionRemoveLocation => 'Remove location'; + String get entryInfoActionRemoveLocation => 'ಸ್ಥಳದ ವಿವರಗಳನ್ನು ತೆಗೆಯಿರಿ'; @override - String get editorActionTransform => 'Transform'; + String get editorActionTransform => 'ರೂಪಾಂತರ'; @override - String get editorTransformCrop => 'Crop'; + String get editorTransformCrop => 'ಕತ್ತರಿಸು'; @override - String get editorTransformRotate => 'Rotate'; + String get editorTransformRotate => 'ತಿರುಗಿಸು'; @override - String get cropAspectRatioFree => 'Free'; + String get cropAspectRatioFree => 'ಉಚಿತ'; @override - String get cropAspectRatioOriginal => 'Original'; + String get cropAspectRatioOriginal => 'ಮೂಲ'; @override - String get cropAspectRatioSquare => 'Square'; + String get cropAspectRatioSquare => 'ಚೌಕ'; @override - String get filterAspectRatioLandscapeLabel => 'Landscape'; + String get filterAspectRatioLandscapeLabel => 'ಭೂದೃಶ್ಯ'; @override - String get filterAspectRatioPortraitLabel => 'Portrait'; + String get filterAspectRatioPortraitLabel => 'ಭಾವಚಿತ್ರ'; @override - String get filterBinLabel => 'Recycle bin'; + String get filterBinLabel => 'ಮರುಬಳಕೆ ತೊಟ್ಟಿ'; @override - String get filterFavouriteLabel => 'Favorite'; + String get filterFavouriteLabel => 'ಅಚ್ಚುಮೆಚ್ಚು'; @override - String get filterNoDateLabel => 'Undated'; + String get filterNoDateLabel => 'ದಿನಾಂಕವಿಲ್ಲ'; @override - String get filterNoAddressLabel => 'No address'; + String get filterNoAddressLabel => 'ವಿಳಾಸವಿಲ್ಲ'; @override - String get filterLocatedLabel => 'Located'; + String get filterLocatedLabel => 'ನೆಲೆಗೊಳಿಸಿದ್ದು'; @override - String get filterNoLocationLabel => 'Unlocated'; + String get filterNoLocationLabel => 'ನೆಲೆ ಇಲ್ಲದ್ದು'; @override - String get filterNoRatingLabel => 'Unrated'; + String get filterNoRatingLabel => 'ಮೌಲ್ಯ ರಹಿತ'; @override - String get filterTaggedLabel => 'Tagged'; + String get filterTaggedLabel => 'ಮೌಲ್ಯ ಸಹಿತ'; @override - String get filterNoTagLabel => 'Untagged'; + String get filterNoTagLabel => 'ಮೌಲ್ಯವಿಲ್ಲದ್ದು'; @override - String get filterNoTitleLabel => 'Untitled'; + String get filterNoTitleLabel => 'ಶೀರ್ಷಿಕೆ ರಹಿತ'; @override - String get filterOnThisDayLabel => 'On this day'; + String get filterOnThisDayLabel => 'ಈ ದಿನದಂದು'; @override - String get filterRecentlyAddedLabel => 'Recently added'; + String get filterRecentlyAddedLabel => 'ಇತ್ತೀಚಿಗೆ ಸೇರಿಸಿದ್ದು'; @override - String get filterRatingRejectedLabel => 'Rejected'; + String get filterRatingRejectedLabel => 'ತಿರಸ್ಕರಿಸಿದ್ದು'; @override - String get filterTypeAnimatedLabel => 'Animated'; + String get filterTypeAnimatedLabel => 'ಆನಿಮೇಟೆಡ್'; @override - String get filterTypeMotionPhotoLabel => 'Motion Photo'; + String get filterTypeMotionPhotoLabel => 'ಚಲಿಸುವ ಚಿತ್ರ'; @override - String get filterTypePanoramaLabel => 'Panorama'; + String get filterTypePanoramaLabel => 'ಪನೋರಮಾ'; @override String get filterTypeRawLabel => 'Raw'; @override - String get filterTypeSphericalVideoLabel => '360° Video'; + String get filterTypeSphericalVideoLabel => '360° ವಿಡಿಯೋ'; @override String get filterTypeGeotiffLabel => 'GeoTIFF'; @override - String get filterMimeImageLabel => 'Image'; + String get filterMimeImageLabel => 'ಚಿತ್ರ'; @override - String get filterMimeVideoLabel => 'Video'; + String get filterMimeVideoLabel => 'ವಿಡಿಯೋ'; @override - String get accessibilityAnimationsRemove => 'Prevent screen effects'; + String get accessibilityAnimationsRemove => 'ಪರದೆಯ ಪರಿಣಾಮಗಳನ್ನು ತಡೆಯಿರಿ'; @override - String get accessibilityAnimationsKeep => 'Keep screen effects'; + String get accessibilityAnimationsKeep => 'ಪರದೆಯ ಪರಿಣಾಮಗಳನ್ನು ಇರಿಸಿ'; @override - String get albumTierNew => 'New'; + String get albumTierNew => 'ಹೊಸ'; @override - String get albumTierPinned => 'Pinned'; + String get albumTierPinned => 'ಚುಚ್ಚಿರುವುದು'; @override - String get albumTierSpecial => 'Common'; + String get albumTierSpecial => 'ಸಾಮಾನ್ಯ'; @override - String get albumTierApps => 'Apps'; + String get albumTierApps => 'ಅಪ್ಲಿಕೇಶನ್‌ಗಳು'; @override - String get albumTierVaults => 'Vaults'; + String get albumTierVaults => 'ನೆಲಮಾಳಿಗೆಗಳು'; @override - String get albumTierDynamic => 'Dynamic'; + String get albumTierDynamic => 'ಕ್ರಿಯಾಶೀಲ'; @override - String get albumTierRegular => 'Others'; + String get albumTierRegular => 'ಇತರೆ'; @override String get coordinateFormatDms => 'DMS'; @@ -516,7 +516,7 @@ class AppLocalizationsKn extends AppLocalizations { String get coordinateFormatDdm => 'DDM'; @override - String get coordinateFormatDecimal => 'Decimal degrees'; + String get coordinateFormatDecimal => 'ದಶಮಾಂಶ ಡಿಗ್ರಿಗಳು'; @override String coordinateDms(String coordinate, String direction) { @@ -524,34 +524,34 @@ class AppLocalizationsKn extends AppLocalizations { } @override - String get coordinateDmsNorth => 'N'; + String get coordinateDmsNorth => 'ಉ'; @override - String get coordinateDmsSouth => 'S'; + String get coordinateDmsSouth => 'ದ'; @override - String get coordinateDmsEast => 'E'; + String get coordinateDmsEast => 'ಪೂ'; @override - String get coordinateDmsWest => 'W'; + String get coordinateDmsWest => 'ಪ'; @override - String get displayRefreshRatePreferHighest => 'Highest rate'; + String get displayRefreshRatePreferHighest => 'ಗರಿಷ್ಠ ದರ'; @override - String get displayRefreshRatePreferLowest => 'Lowest rate'; + String get displayRefreshRatePreferLowest => 'ಕನಿಷ್ಠ ದರ'; @override - String get keepScreenOnNever => 'Never'; + String get keepScreenOnNever => 'ಎಂದಿಗೂ ಇಲ್ಲ'; @override - String get keepScreenOnVideoPlayback => 'During video playback'; + String get keepScreenOnVideoPlayback => 'ವಿಡಿಯೋ ಚಲನೆಯಲ್ಲಿರುವಾಗ'; @override - String get keepScreenOnViewerOnly => 'Viewer page only'; + String get keepScreenOnViewerOnly => 'ವೀಕ್ಷಣಾ ಪುಟದಲ್ಲಿ ಮಾತ್ರ'; @override - String get keepScreenOnAlways => 'Always'; + String get keepScreenOnAlways => 'ಯಾವಾಗಲೂ'; @override String get lengthUnitPixel => 'px'; @@ -560,209 +560,209 @@ class AppLocalizationsKn extends AppLocalizations { String get lengthUnitPercent => '%'; @override - String get mapStyleGoogleNormal => 'Google Maps'; + String get mapStyleGoogleNormal => 'ಗೂಗಲ್ ನಕಾಶೆಗಳು'; @override - String get mapStyleGoogleHybrid => 'Google Maps (Hybrid)'; + String get mapStyleGoogleHybrid => 'ಗೂಗಲ್ ನಕಾಶೆಗಳು (ಹೈಬ್ರಿಡ್)'; @override - String get mapStyleGoogleTerrain => 'Google Maps (Terrain)'; + String get mapStyleGoogleTerrain => 'ಗೂಗಲ್ ನಕಾಶೆಗಳು (ಭೂ ಪ್ರದೇಶ)'; @override - String get mapStyleOsmLiberty => 'OSM Liberty'; + String get mapStyleOsmLiberty => 'OSM ಸ್ವಾತಂತ್ರ್ಯ'; @override - String get mapStyleOpenTopoMap => 'OpenTopoMap'; + String get mapStyleOpenTopoMap => 'ಓಪನ್ ಟೊಪೊ ಮ್ಯಾಪ್'; @override - String get mapStyleOsmHot => 'Humanitarian OSM'; + String get mapStyleOsmHot => 'ಮಾನವೀಯ OSM'; @override - String get mapStyleStamenWatercolor => 'Stamen Watercolor'; + String get mapStyleStamenWatercolor => 'Stamen ಜಲವರ್ಣ'; @override - String get maxBrightnessNever => 'Never'; + String get maxBrightnessNever => 'ಎಂದಿಗೂ ಇಲ್ಲ'; @override - String get maxBrightnessAlways => 'Always'; + String get maxBrightnessAlways => 'ಯಾವಾಗಲೂ'; @override - String get nameConflictStrategyRename => 'Rename'; + String get nameConflictStrategyRename => 'ಮರುನಾಮಕರಣ'; @override - String get nameConflictStrategyReplace => 'Replace'; + String get nameConflictStrategyReplace => 'ಬದಲಾಯಿಸು'; @override - String get nameConflictStrategySkip => 'Skip'; + String get nameConflictStrategySkip => 'ಬಿಟ್ಟುಬಿಡು'; @override - String get overlayHistogramNone => 'None'; + String get overlayHistogramNone => 'ಏನಿಲ್ಲ'; @override String get overlayHistogramRGB => 'RGB'; @override - String get overlayHistogramLuminance => 'Luminance'; + String get overlayHistogramLuminance => 'ಪ್ರಕಾಶ'; @override - String get subtitlePositionTop => 'Top'; + String get subtitlePositionTop => 'ಮೇಲ್ತುದಿ'; @override - String get subtitlePositionBottom => 'Bottom'; + String get subtitlePositionBottom => 'ಬುಡ'; @override - String get themeBrightnessLight => 'Light'; + String get themeBrightnessLight => 'ತಿಳಿ ಬಣ್ಣ'; @override - String get themeBrightnessDark => 'Dark'; + String get themeBrightnessDark => 'ಗಾಢ ಬಣ್ಣ'; @override - String get themeBrightnessBlack => 'Black'; + String get themeBrightnessBlack => 'ಕಡುಕಪ್ಪು'; @override - String get unitSystemMetric => 'Metric'; + String get unitSystemMetric => 'ಮೆಟ್ರಿಕ್'; @override - String get unitSystemImperial => 'Imperial'; + String get unitSystemImperial => 'ಇಂಪೀರಿಯಲ್'; @override - String get vaultLockTypePattern => 'Pattern'; + String get vaultLockTypePattern => 'ಪ್ಯಾಟರ್ನ್'; @override - String get vaultLockTypePin => 'PIN'; + String get vaultLockTypePin => 'ಪಿನ್'; @override - String get vaultLockTypePassword => 'Password'; + String get vaultLockTypePassword => 'ಕೀಲಿಪದ'; @override - String get settingsVideoEnablePip => 'Picture-in-picture'; + String get settingsVideoEnablePip => 'ಚಿತ್ರದೊಳಗಿನ ಚಿತ್ರಣ'; @override - String get videoControlsPlayOutside => 'Open with other player'; + String get videoControlsPlayOutside => 'ಇನ್ನೊಂದು ಪ್ಲೇಯರ್ ನಲ್ಲಿ ತೆರೆಯಿರಿ'; @override - String get videoLoopModeNever => 'Never'; + String get videoLoopModeNever => 'ಇಂದಿಗೂ ಇಲ್ಲ'; @override - String get videoLoopModeShortOnly => 'Short videos only'; + String get videoLoopModeShortOnly => 'ಚಿಕ್ಕ ವಿಡಿಯೋಗಳನ್ನು ಮಾತ್ರ'; @override - String get videoLoopModeAlways => 'Always'; + String get videoLoopModeAlways => 'ಯಾವಾಗಲೂ'; @override - String get videoPlaybackSkip => 'Skip'; + String get videoPlaybackSkip => 'ಬಿಟ್ಟುಬಿಡು'; @override - String get videoPlaybackMuted => 'Play muted'; + String get videoPlaybackMuted => 'ಶಬ್ದರಹಿತವಾಗಿ ಪ್ಲೇ ಮಾಡಿ'; @override - String get videoPlaybackWithSound => 'Play with sound'; + String get videoPlaybackWithSound => 'ಶಬ್ದಸಹಿತವಾಗಿ ಪ್ಲೇ ಮಾಡಿ'; @override - String get videoResumptionModeNever => 'Never'; + String get videoResumptionModeNever => 'ಎಂದಿಗೂ ಇಲ್ಲ'; @override - String get videoResumptionModeAlways => 'Always'; + String get videoResumptionModeAlways => 'ಯಾವಾಗಲೂ'; @override - String get viewerTransitionSlide => 'Slide'; + String get viewerTransitionSlide => 'ಜಾರಿಸು'; @override - String get viewerTransitionParallax => 'Parallax'; + String get viewerTransitionParallax => 'ಪ್ಯಾರಾಲಾಕ್ಸ್'; @override - String get viewerTransitionFade => 'Fade'; + String get viewerTransitionFade => 'ಮರೆಯಾಗಿಸು'; @override - String get viewerTransitionZoomIn => 'Zoom in'; + String get viewerTransitionZoomIn => 'ಹಿಗ್ಗಿಸು'; @override - String get viewerTransitionNone => 'None'; + String get viewerTransitionNone => 'ಏನಿಲ್ಲ'; @override - String get wallpaperTargetHome => 'Home screen'; + String get wallpaperTargetHome => 'ಮುಖ ಪರದೆ'; @override - String get wallpaperTargetLock => 'Lock screen'; + String get wallpaperTargetLock => 'ಲಾಕ್ ಪರದೆ'; @override - String get wallpaperTargetHomeLock => 'Home and lock screens'; + String get wallpaperTargetHomeLock => 'ಮುಖ ಮತ್ತು ಲಾಕ್ ಪರದೆ'; @override - String get widgetDisplayedItemRandom => 'Random'; + String get widgetDisplayedItemRandom => 'ಇಷ್ಟಬಂದಂತೆ'; @override - String get widgetDisplayedItemMostRecent => 'Most recent'; + String get widgetDisplayedItemMostRecent => 'ಅತ್ಯಂತ ಇತ್ತೀಚಿನ'; @override - String get widgetOpenPageHome => 'Open home'; + String get widgetOpenPageHome => 'ಮುಖ್ಯಪರದೆ ತೆರೆಯಿರಿ'; @override - String get widgetOpenPageCollection => 'Open collection'; + String get widgetOpenPageCollection => 'ಸಂಗ್ರಹವನ್ನು ತೆರೆಯಿರಿ'; @override - String get widgetOpenPageViewer => 'Open viewer'; + String get widgetOpenPageViewer => 'ವೀಕ್ಷಕವನ್ನು ತೆರೆಯಿರಿ'; @override - String get widgetTapUpdateWidget => 'Update widget'; + String get widgetTapUpdateWidget => 'ವಿಜೆಟ್ ನವೀಕರಿಸಿ'; @override - String get storageVolumeDescriptionFallbackPrimary => 'Internal storage'; + String get storageVolumeDescriptionFallbackPrimary => 'ಆಂತರಿಕ ಸಂಗ್ರಹಣೆ'; @override - String get storageVolumeDescriptionFallbackNonPrimary => 'SD card'; + String get storageVolumeDescriptionFallbackNonPrimary => 'ಎಸ್ ಡಿ ಕಾರ್ಡ್'; @override - String get rootDirectoryDescription => 'root directory'; + String get rootDirectoryDescription => 'ಮೂಲ ಕೋಶ'; @override String otherDirectoryDescription(String name) { - return '“$name” directory'; + return '“$name” ಕೋಶ'; } @override String storageAccessDialogMessage(String directory, String volume) { - return 'Please select the $directory of “$volume” in the next screen to give this app access to it.'; + return 'ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ನೀಡಲು ಮುಂದಿನ ಪರದೆಯಲ್ಲಿ “$volume” ದ $directory ಅನ್ನು ಆಯ್ಕೆ ಮಾಡಿ.'; } @override String restrictedAccessDialogMessage(String directory, String volume) { - return 'This app is not allowed to modify files in the $directory of “$volume”.\n\nPlease use a pre-installed file manager or gallery app to move the items to another directory.'; + return '$directory ನ “$volume”ನಲ್ಲಿರುವ ಕಡತಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸಲಾಗಿಲ್ಲ.\n\nದಯವಿಟ್ಟು ವಸ್ತುಗಳನ್ನು ಮತ್ತೊಂದು ಕೋಶಕ್ಕೆ ಸ್ಥಳಾಂತರಿಸಲು ಮೊದಲೇ ಸ್ಥಾಪಿಸಲಾದ ಕಡತ ನಿರ್ವಾಹಕ ಅಥವಾ ಗ್ಯಾಲರಿ ಅಪ್ಲಿಕೇಶನ್ ಬಳಸಿ.'; } @override String notEnoughSpaceDialogMessage(String neededSize, String freeSize, String volume) { - return 'This operation needs $neededSize of free space on “$volume” to complete, but there is only $freeSize left.'; + return 'ಈ ಕಾರ್ಯಾಚರಣೆಗೆ ಪೂರ್ಣಗೊಳ್ಳಲು “$volume” ನಲ್ಲಿ $neededSize ಉಚಿತ ಸ್ಥಳಾವಕಾಶದ ಅಗತ್ಯವಿದೆ, ಆದರೆ ಕೇವಲ $freeSize ಮಾತ್ರ ಲಭ್ಯವಿದೆ.'; } @override - String get missingSystemFilePickerDialogMessage => 'The system file picker is missing or disabled. Please enable it and try again.'; + String get missingSystemFilePickerDialogMessage => 'ವ್ಯವಸ್ಥೆಯ ಕಡತ ಆರಿಸುವಿಕೆ ಕಾಣೆಯಾಗಿದೆ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ದಯವಿಟ್ಟು ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ ಮತ್ತು ಪುನಃ ಪ್ರಯತ್ನಿಸಿ.'; @override String unsupportedTypeDialogMessage(int count, String types) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'This operation is not supported for items of the following types: $types.', - one: 'This operation is not supported for items of the following type: $types.', + other: 'ಈ ಕಾರ್ಯಾಚರಣೆಯು ಈ ವಿಧದ ವಸ್ತುಗಳಿಗೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ: $types.', + one: 'ಈ ಕಾರ್ಯಾಚರಣೆಯು ಈ ವಿಧದ ವಸ್ತುವಿಗೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ: $types.', ); return '$_temp0'; } @override - String get nameConflictDialogSingleSourceMessage => 'Some files in the destination folder have the same name.'; + String get nameConflictDialogSingleSourceMessage => 'ಗಮ್ಯಸ್ಥಾನ ಕೋಶದಲ್ಲಿರುವ ಕೆಲವು ಕಡತಗಳು ಒಂದೇ ಹೆಸರನ್ನು ಹೊಂದಿವೆ.'; @override - String get nameConflictDialogMultipleSourceMessage => 'Some files have the same name.'; + String get nameConflictDialogMultipleSourceMessage => 'ಕೆಲವು ಕಡತಗಳು ಒಂದೇ ಹೆಸರನ್ನು ಹೊಂದಿವೆ.'; @override - String get addShortcutDialogLabel => 'Shortcut label'; + String get addShortcutDialogLabel => 'ಶಾರ್ಟ್ಕಟ್ ಹೆಸರು'; @override - String get addShortcutButtonLabel => 'ADD'; + String get addShortcutButtonLabel => 'ಸೇರಿಸು'; @override - String get noMatchingAppDialogMessage => 'There are no apps that can handle this.'; + String get noMatchingAppDialogMessage => 'ಇದನ್ನು ನಿಭಾಯಿಸಬಲ್ಲ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಲ್ಲ.'; @override String binEntriesConfirmationDialogMessage(int count) { @@ -772,8 +772,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Move these $countString items to the recycle bin?', - one: 'Move this item to the recycle bin?', + other: '$countString ವಸ್ತುಗಳನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸುವುದೇ?', + one: 'ಇದನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸುವುದೇ?', ); return '$_temp0'; } @@ -786,130 +786,130 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Delete these $countString items?', - one: 'Delete this item?', + other: '$countString ವಸ್ತುಗಳನ್ನು ಅಳಿಸುವುದೇ?', + one: 'ಇದನ್ನು ಅಳಿಸುವುದೇ?', ); return '$_temp0'; } @override - String get moveUndatedConfirmationDialogMessage => 'Save item dates before proceeding?'; + String get moveUndatedConfirmationDialogMessage => 'ಮುಂದುವರಿಯುವ ಮೊದಲು ವಸ್ತುವಿನ ದಿನಾಂಕಗಳನ್ನು ಉಳಿಸುವುದೇ?'; @override - String get moveUndatedConfirmationDialogSetDate => 'Save dates'; + String get moveUndatedConfirmationDialogSetDate => 'ದಿನಾಂಕಗಳನ್ನು ಉಳಿಸಿ'; @override String videoResumeDialogMessage(String time) { - return 'Do you want to resume playing at $time?'; + return '$timeಕ್ಕೆ ಪುನರಾರಂಭಿಸಲು ನೀವು ಬಯಸುವಿರಾ?'; } @override - String get videoStartOverButtonLabel => 'START OVER'; + String get videoStartOverButtonLabel => 'ಬುಡದಿಂದ ಪ್ರಾರಂಭಿಸಿ'; @override - String get videoResumeButtonLabel => 'RESUME'; + String get videoResumeButtonLabel => 'ಮುಂದುವರೆಸಿ'; @override - String get setCoverDialogLatest => 'Latest item'; + String get setCoverDialogLatest => 'ಹೊಚ್ಚಹೊಸ ವಸ್ತುಗಳು'; @override - String get setCoverDialogAuto => 'Auto'; + String get setCoverDialogAuto => 'ಸ್ವಯಂಚಾಲಿತ'; @override - String get setCoverDialogCustom => 'Custom'; + String get setCoverDialogCustom => 'ಇಚ್ಛಾನುಸಾರ'; @override - String get hideFilterConfirmationDialogMessage => 'Matching photos and videos will be hidden from your collection. You can show them again from the “Privacy” settings.\n\nAre you sure you want to hide them?'; + String get hideFilterConfirmationDialogMessage => 'ಹೊಂದಿಕೆಯ ಚಿತ್ರಗಳನ್ನು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ನಿಮ್ಮ ಸಂಗ್ರಹದಿಂದ ಮರೆಮಾಡಲಾಗುತ್ತದೆ. “ಗೌಪ್ಯತೆ” ಸಂಯೋಜನೆಗಳಿಂದ ನೀವು ಅವುಗಳನ್ನು ಮತ್ತೆ ತೋರಿಸಬಹುದು.\n\nನೀವು ಅವುಗಳನ್ನು ಮರೆಮಾಡಲು ಬಯಸುತ್ತೀರಾ?'; @override - String get newAlbumDialogTitle => 'New Album'; + String get newAlbumDialogTitle => 'ಹೊಸ ಆಲ್ಬಮ್'; @override - String get newAlbumDialogNameLabel => 'Album name'; + String get newAlbumDialogNameLabel => 'ಆಲ್ಬಮ್ ಹೆಸರು'; @override - String get newAlbumDialogAlbumAlreadyExistsHelper => 'Album already exists'; + String get newAlbumDialogAlbumAlreadyExistsHelper => 'ಆಲ್ಬಮ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ'; @override - String get newAlbumDialogNameLabelAlreadyExistsHelper => 'Directory already exists'; + String get newAlbumDialogNameLabelAlreadyExistsHelper => 'ಕೋಶವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ'; @override - String get newAlbumDialogStorageLabel => 'Storage:'; + String get newAlbumDialogStorageLabel => 'ಸಂಗ್ರಹಣೆ:'; @override - String get newDynamicAlbumDialogTitle => 'New Dynamic Album'; + String get newDynamicAlbumDialogTitle => 'ಹೊಸ ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್'; @override - String get dynamicAlbumAlreadyExists => 'Dynamic album already exists'; + String get dynamicAlbumAlreadyExists => 'ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ'; @override - String get newVaultWarningDialogMessage => 'Items in vaults are only available to this app and no others.\n\nIf you uninstall this app, or clear this app data, you will lose all these items.'; + String get newVaultWarningDialogMessage => 'ನೆಲಮಾಳಿಗೆಯಲ್ಲಿನ ವಸ್ತುಗಳು ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಮಾತ್ರ ಲಭ್ಯವಿದೆ ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಲ್ಲಿ ಇರುವುದಿಲ್ಲ.\n\nನೀವು ಈ ಅಪ್ಲಿಕೇಶನ್ ನನ್ನು ಅಸ್ಥಾಪಿಸಿದರೆ ಅಥವಾ ಈ ಅಪ್ಲಿಕೇಶನ್ ದತ್ತಾಂಶಗಳನ್ನು ತೆರವುಗೊಳಿಸಿದರೆ, ನೀವು ಈ ಎಲ್ಲ ವಸ್ತುಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳುತ್ತೀರಿ.'; @override - String get newVaultDialogTitle => 'New Vault'; + String get newVaultDialogTitle => 'ಹೊಸ ನೆಲಮಾಳಿಗೆ'; @override - String get configureVaultDialogTitle => 'Configure Vault'; + String get configureVaultDialogTitle => 'ನೆಲಮಾಳಿಗೆಯನ್ನು ಸಂರಚಿಸಿ'; @override - String get vaultDialogLockModeWhenScreenOff => 'Lock when screen turns off'; + String get vaultDialogLockModeWhenScreenOff => 'ಪರದೆ ಬಂದಾದಾಗ ಲಾಕ್ ಮಾಡಿ'; @override - String get vaultDialogLockTypeLabel => 'Lock type'; + String get vaultDialogLockTypeLabel => 'ಲಾಕ್ ವಿಧ'; @override - String get patternDialogEnter => 'Enter pattern'; + String get patternDialogEnter => 'ಪ್ಯಾಟರ್ನ್ ನಮೂದಿಸಿ'; @override - String get patternDialogConfirm => 'Confirm pattern'; + String get patternDialogConfirm => 'ಪ್ಯಾಟರ್ನ್ ಖಚಿತಪಡಿಸಿ'; @override - String get pinDialogEnter => 'Enter PIN'; + String get pinDialogEnter => 'PIN ನಮೂದಿಸಿ'; @override - String get pinDialogConfirm => 'Confirm PIN'; + String get pinDialogConfirm => 'PIN ಖಚಿತಪಡಿಸಿ'; @override - String get passwordDialogEnter => 'Enter password'; + String get passwordDialogEnter => 'ಕೀಲಿಪದ ನಮೂದಿಸಿ'; @override - String get passwordDialogConfirm => 'Confirm password'; + String get passwordDialogConfirm => 'ಕೀಲಿಪದ ಖಚಿತಪಡಿಸಿ'; @override - String get authenticateToConfigureVault => 'Authenticate to configure vault'; + String get authenticateToConfigureVault => 'ನೆಲಮಾಳಿಗೆಯನ್ನು ಸಂರಚಿಸಲು ಧೃಡೀಕರಿಸಿ'; @override - String get authenticateToUnlockVault => 'Authenticate to unlock vault'; + String get authenticateToUnlockVault => 'ನೆಲಮಾಳಿಗೆಯ ಲಾಕ್ ತೆಗೆಯಲು ಧೃಡೀಕರಿಸಿ'; @override - String get vaultBinUsageDialogMessage => 'Some vaults are using the recycle bin.'; + String get vaultBinUsageDialogMessage => 'ಕೆಲವು ನೆಲಮಾಳಿಗೆಗಳು ಮರುಬಳಕೆ ತೊಟ್ಟಿಯನ್ನು ಬಳಸುತ್ತಿವೆ.'; @override - String get renameAlbumDialogLabel => 'New name'; + String get renameAlbumDialogLabel => 'ಹೊಸ ಹೆಸರು'; @override - String get renameAlbumDialogLabelAlreadyExistsHelper => 'Directory already exists'; + String get renameAlbumDialogLabelAlreadyExistsHelper => 'ಕೋಶವು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ'; @override - String get renameEntrySetPageTitle => 'Rename'; + String get renameEntrySetPageTitle => 'ಮರುಹೆಸರಿಸಿ'; @override - String get renameEntrySetPagePatternFieldLabel => 'Naming pattern'; + String get renameEntrySetPagePatternFieldLabel => 'ಹೆಸರಿಸುವ ಮಾದರಿ'; @override - String get renameEntrySetPageInsertTooltip => 'Insert field'; + String get renameEntrySetPageInsertTooltip => 'ಕ್ಷೇತ್ರವನ್ನು ಸೇರಿಸಿ'; @override - String get renameEntrySetPagePreviewSectionTitle => 'Preview'; + String get renameEntrySetPagePreviewSectionTitle => 'ಮುನ್ನೋಟ'; @override - String get renameProcessorCounter => 'Counter'; + String get renameProcessorCounter => 'ಗಣಕ'; @override - String get renameProcessorHash => 'Hash'; + String get renameProcessorHash => 'ಹ್ಯಾಷ್'; @override - String get renameProcessorName => 'Name'; + String get renameProcessorName => 'ಹೆಸರು'; @override String deleteSingleAlbumConfirmationDialogMessage(int count) { @@ -919,8 +919,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Delete this album and the $countString items in it?', - one: 'Delete this album and the item in it?', + other: 'ಈ ಆಲ್ಬಮ್ ಮತ್ತು ಅದರಲ್ಲಿರುವ $countString ವಸ್ತುಗಳನ್ನು ಅಳಿಸುವುದೇ?', + one: 'ಈ ಆಲ್ಬಮ್ ಮತ್ತು ಅದರಲ್ಲಿರುವ ವಸ್ತುವನ್ನು ಅಳಿಸುವುದೇ?', ); return '$_temp0'; } @@ -933,347 +933,347 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Delete these albums and the $countString items in them?', - one: 'Delete these albums and the item in them?', + other: 'ಈ ಆಲ್ಬಮ್ ಗಳನ್ನು ಮತ್ತು ಅದರಲ್ಲಿರುವ $countString ವಸ್ತುಗಳನ್ನು ಅಳಿಸುವುದೇ?', + one: 'ಈ ಆಲ್ಬಮ್ ಗಳನ್ನು ಮತ್ತು ಅದರಲ್ಲಿರುವ ವಸ್ತುವನ್ನು ಅಳಿಸುವುದೇ?', ); return '$_temp0'; } @override - String get exportEntryDialogFormat => 'Format:'; + String get exportEntryDialogFormat => 'ಸ್ವರೂಪ:'; @override - String get exportEntryDialogWidth => 'Width'; + String get exportEntryDialogWidth => 'ಅಗಲ'; @override - String get exportEntryDialogHeight => 'Height'; + String get exportEntryDialogHeight => 'ಎತ್ತರ'; @override - String get exportEntryDialogQuality => 'Quality'; + String get exportEntryDialogQuality => 'ಗುಣಮಟ್ಟ'; @override - String get exportEntryDialogWriteMetadata => 'Write metadata'; + String get exportEntryDialogWriteMetadata => 'ಮೆಟಾಡೇಟಾ ಬರೆಯಿರಿ'; @override - String get renameEntryDialogLabel => 'New name'; + String get renameEntryDialogLabel => 'ಹೊಸ ಹೆಸರು'; @override - String get editEntryDialogCopyFromItem => 'Copy from other item'; + String get editEntryDialogCopyFromItem => 'ಇತರ ವಸ್ತುವಿನಿಂದ ನಕಲಿಸಿ'; @override - String get editEntryDialogTargetFieldsHeader => 'Fields to modify'; + String get editEntryDialogTargetFieldsHeader => 'ಮಾರ್ಪಡಿಸುವ ಕ್ಷೇತ್ರಗಳು'; @override - String get editEntryDateDialogTitle => 'Date & Time'; + String get editEntryDateDialogTitle => 'ದಿನಾಂಕ ಮತ್ತು ಸಮಯ'; @override - String get editEntryDateDialogSetCustom => 'Set custom date'; + String get editEntryDateDialogSetCustom => 'ನಿಗದಿತ ದಿನಾಂಕವನ್ನು ಹೊಂದಿಸಿ'; @override - String get editEntryDateDialogCopyField => 'Copy from other date'; + String get editEntryDateDialogCopyField => 'ಬೇರೆಯ ದಿನಾಂಕದಿಂದ ನಕಲಿಸಿ'; @override - String get editEntryDateDialogExtractFromTitle => 'Extract from title'; + String get editEntryDateDialogExtractFromTitle => 'ಶೀರ್ಷಿಕೆಯಿಂದ ಆಯ್ದು ತೆಗೆಯಿರಿ'; @override - String get editEntryDateDialogShift => 'Shift'; + String get editEntryDateDialogShift => 'ಸ್ಥಳಾಂತರಿಸು'; @override - String get editEntryDateDialogSourceFileModifiedDate => 'File modified date'; + String get editEntryDateDialogSourceFileModifiedDate => 'ಕಡತ ಮಾರ್ಪಡಿಸಿದ ದಿನಾಂಕ'; @override - String get durationDialogHours => 'Hours'; + String get durationDialogHours => 'ಘಂಟೆಗಳು'; @override - String get durationDialogMinutes => 'Minutes'; + String get durationDialogMinutes => 'ನಿಮಿಷಗಳು'; @override - String get durationDialogSeconds => 'Seconds'; + String get durationDialogSeconds => 'ಕ್ಷಣಗಳು'; @override - String get editEntryLocationDialogTitle => 'Location'; + String get editEntryLocationDialogTitle => 'ಸ್ಥಳ'; @override - String get editEntryLocationDialogSetCustom => 'Set custom location'; + String get editEntryLocationDialogSetCustom => 'ನಿಗದಿತ ಸ್ಥಳವನ್ನು ಹೊಂದಿಸಿ'; @override - String get editEntryLocationDialogChooseOnMap => 'Choose on map'; + String get editEntryLocationDialogChooseOnMap => 'ನಕ್ಷೆಯಲ್ಲಿ ಆರಿಸಿ'; @override - String get editEntryLocationDialogImportGpx => 'Import GPX'; + String get editEntryLocationDialogImportGpx => 'ಜಿಪಿಎಕ್ಸ್ ಆಮದು ಮಾಡಿ'; @override - String get editEntryLocationDialogLatitude => 'Latitude'; + String get editEntryLocationDialogLatitude => 'ಅಕ್ಷಾಂಶ'; @override - String get editEntryLocationDialogLongitude => 'Longitude'; + String get editEntryLocationDialogLongitude => 'ರೇಖಾಂಶ'; @override - String get editEntryLocationDialogTimeShift => 'Time shift'; + String get editEntryLocationDialogTimeShift => 'ಸಮಯ ಸ್ಥಳಾಂತರ'; @override - String get locationPickerUseThisLocationButton => 'Use this location'; + String get locationPickerUseThisLocationButton => 'ಈ ಸ್ಥಳವನ್ನು ಬಳಸಿ'; @override - String get editEntryRatingDialogTitle => 'Rating'; + String get editEntryRatingDialogTitle => 'ರೇಟಿಂಗ್'; @override - String get removeEntryMetadataDialogTitle => 'Metadata Removal'; + String get removeEntryMetadataDialogTitle => 'ಮೆಟಾಡೇಟಾ ತೆಗೆಯುವಿಕೆ'; @override - String get removeEntryMetadataDialogAll => 'All'; + String get removeEntryMetadataDialogAll => 'ಎಲ್ಲವೂ'; @override - String get removeEntryMetadataDialogMore => 'More'; + String get removeEntryMetadataDialogMore => 'ಇನ್ನಷ್ಟು'; @override - String get removeEntryMetadataMotionPhotoXmpWarningDialogMessage => 'XMP is required to play the video inside a motion photo.\n\nAre you sure you want to remove it?'; + String get removeEntryMetadataMotionPhotoXmpWarningDialogMessage => 'ಚಲನೆಯ ಚಿತ್ರದ ಒಳಗೆ ವೀಡಿಯೊವನ್ನು ಚಾಲನೆ ಮಾಡಲು XMP ಅಗತ್ಯವಿದೆ.\n\nನೀವು ಅದನ್ನು ತೆಗೆದುಹಾಕಲು ಬಯಸುತ್ತೀರಾ?'; @override - String get videoSpeedDialogLabel => 'Playback speed'; + String get videoSpeedDialogLabel => 'ಚಾಲನೆಯ ವೇಗ'; @override - String get videoStreamSelectionDialogVideo => 'Video'; + String get videoStreamSelectionDialogVideo => 'ವಿಡಿಯೋ'; @override - String get videoStreamSelectionDialogAudio => 'Audio'; + String get videoStreamSelectionDialogAudio => 'ಆಡಿಯೋ'; @override - String get videoStreamSelectionDialogText => 'Subtitles'; + String get videoStreamSelectionDialogText => 'ಅಡಿಬರಹ'; @override - String get videoStreamSelectionDialogOff => 'Off'; + String get videoStreamSelectionDialogOff => 'ನಂದಿಸು'; @override - String get videoStreamSelectionDialogTrack => 'Track'; + String get videoStreamSelectionDialogTrack => 'ಜಾಡು'; @override - String get videoStreamSelectionDialogNoSelection => 'There are no other tracks.'; + String get videoStreamSelectionDialogNoSelection => 'ಬೇರೆ ಯಾವುದೇ ಹಾಡುಗಳಿಲ್ಲ.'; @override - String get genericSuccessFeedback => 'Done!'; + String get genericSuccessFeedback => 'ಮುಗಿದಿದೆ!'; @override - String get genericFailureFeedback => 'Failed'; + String get genericFailureFeedback => 'ವಿಫಲವಾಗಿದೆ'; @override - String get genericDangerWarningDialogMessage => 'Are you sure?'; + String get genericDangerWarningDialogMessage => 'ನೀವು ಖಚಿತಪಡಿಸುವಿರೇ?'; @override - String get tooManyItemsErrorDialogMessage => 'Try again with fewer items.'; + String get tooManyItemsErrorDialogMessage => 'ಕಡಿಮೆ ವಸ್ತುಗಳೊಂದಿಗೆ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.'; @override - String get menuActionConfigureView => 'View'; + String get menuActionConfigureView => 'ನೋಟ'; @override - String get menuActionSelect => 'Select'; + String get menuActionSelect => 'ಆರಿಸು'; @override - String get menuActionSelectAll => 'Select all'; + String get menuActionSelectAll => 'ಎಲ್ಲವನ್ನು ಆರಿಸು'; @override - String get menuActionSelectNone => 'Select none'; + String get menuActionSelectNone => 'ಏನನ್ನು ಆರಿಸಬೇಡಿ'; @override - String get menuActionMap => 'Map'; + String get menuActionMap => 'ನಕ್ಷೆ'; @override - String get menuActionSlideshow => 'Slideshow'; + String get menuActionSlideshow => 'ಸ್ಲೈಡ್ ಶೋ'; @override - String get menuActionStats => 'Stats'; + String get menuActionStats => 'ಅಂಕಿಅಂಶಗಳು'; @override - String get viewDialogSortSectionTitle => 'Sort'; + String get viewDialogSortSectionTitle => 'ವಿಂಗಡಿಸಿ'; @override - String get viewDialogGroupSectionTitle => 'Group'; + String get viewDialogGroupSectionTitle => 'ಗುಂಪು'; @override - String get viewDialogLayoutSectionTitle => 'Layout'; + String get viewDialogLayoutSectionTitle => 'ವಿನ್ಯಾಸ'; @override - String get viewDialogReverseSortOrder => 'Reverse sort order'; + String get viewDialogReverseSortOrder => 'ಹಿಮ್ಮುಖ ವಿಂಗಡಣೆ ಕ್ರಮ'; @override - String get tileLayoutMosaic => 'Mosaic'; + String get tileLayoutMosaic => 'ಮೊಸಾಯಿಕ್'; @override - String get tileLayoutGrid => 'Grid'; + String get tileLayoutGrid => 'ಜಾಲ'; @override - String get tileLayoutList => 'List'; + String get tileLayoutList => 'ಪಟ್ಟಿ'; @override - String get castDialogTitle => 'Cast Devices'; + String get castDialogTitle => 'ಬಿತ್ತರಿಸುವ ಸಾಧನಗಳು'; @override - String get coverDialogTabCover => 'Cover'; + String get coverDialogTabCover => 'ರಕ್ಷಾಕವಚ'; @override - String get coverDialogTabApp => 'App'; + String get coverDialogTabApp => 'ಅಪ್ಲಿಕೇಶನ್'; @override - String get coverDialogTabColor => 'Color'; + String get coverDialogTabColor => 'ವರ್ಣ'; @override - String get appPickDialogTitle => 'Pick App'; + String get appPickDialogTitle => 'ಅಪ್ಲಿಕೇಶನ್ ಆರಿಸಿ'; @override - String get appPickDialogNone => 'None'; + String get appPickDialogNone => 'ಏನಿಲ್ಲ'; @override - String get aboutPageTitle => 'About'; + String get aboutPageTitle => 'ಕುರಿತು'; @override - String get aboutLinkLicense => 'License'; + String get aboutLinkLicense => 'ಪರವಾನಗಿ'; @override - String get aboutLinkPolicy => 'Privacy Policy'; + String get aboutLinkPolicy => 'ಗೌಪ್ಯತೆ ನೀತಿ'; @override - String get aboutBugSectionTitle => 'Bug Report'; + String get aboutBugSectionTitle => 'ದೋಷದ ವರದಿ'; @override - String get aboutBugSaveLogInstruction => 'Save app logs to a file'; + String get aboutBugSaveLogInstruction => 'ಅಪ್ಲಿಕೇಶನ್ ದಾಖಲೆಗಳನ್ನು ಕಡತಕ್ಕೆ ಉಳಿಸಿ'; @override - String get aboutBugCopyInfoInstruction => 'Copy system information'; + String get aboutBugCopyInfoInstruction => 'ಸಾಧನದ ಮಾಹಿತಿಯನ್ನು ನಕಲಿಸಿ'; @override - String get aboutBugCopyInfoButton => 'Copy'; + String get aboutBugCopyInfoButton => 'ನಕಲಿಸಿ'; @override - String get aboutBugReportInstruction => 'Report on GitHub with the logs and system information'; + String get aboutBugReportInstruction => 'ದಾಖಲೆಗಳು ಮತ್ತು ಸಾಧನದ ಮಾಹಿತಿಯ ಜೊತೆಗೆ Githubನಲ್ಲಿ ವರದಿ ಮಾಡಿ'; @override - String get aboutBugReportButton => 'Report'; + String get aboutBugReportButton => 'ವರದಿ'; @override - String get aboutDataUsageSectionTitle => 'Data Usage'; + String get aboutDataUsageSectionTitle => 'ದತ್ತಾಂಶ ಬಳಕೆ'; @override - String get aboutDataUsageData => 'Data'; + String get aboutDataUsageData => 'ದತ್ತಾಂಶ'; @override - String get aboutDataUsageCache => 'Cache'; + String get aboutDataUsageCache => 'ತಾತ್ಕಾಲಿಕ ಸಂಗ್ರಹ'; @override - String get aboutDataUsageDatabase => 'Database'; + String get aboutDataUsageDatabase => 'ದತ್ತಾಂಶ ಸಂಚಯ'; @override - String get aboutDataUsageMisc => 'Misc'; + String get aboutDataUsageMisc => 'ನಾನಾ ರೀತಿಯ'; @override - String get aboutDataUsageInternal => 'Internal'; + String get aboutDataUsageInternal => 'ಆಂತರಿಕ'; @override - String get aboutDataUsageExternal => 'External'; + String get aboutDataUsageExternal => 'ಬಾಹ್ಯ'; @override - String get aboutDataUsageClearCache => 'Clear Cache'; + String get aboutDataUsageClearCache => 'ಕ್ಯಾಶೆ ಸಂಗ್ರಹ ಅಳಿಸಿ'; @override - String get aboutCreditsSectionTitle => 'Credits'; + String get aboutCreditsSectionTitle => 'ಮನ್ನಣೆಗಳು'; @override - String get aboutCreditsWorldAtlas1 => 'This app uses a TopoJSON file from'; + String get aboutCreditsWorldAtlas1 => 'ಈ ಅಪ್ಲಿಕೇಶನ್ TopoJSON ಕಡತವನ್ನು ಇವರಿಂದ ಬಳಸುತ್ತದೆ'; @override - String get aboutCreditsWorldAtlas2 => 'under ISC License.'; + String get aboutCreditsWorldAtlas2 => 'ISC ಪರವಾನಗಿ ಅಡಿಯಲ್ಲಿ.'; @override - String get aboutTranslatorsSectionTitle => 'Translators'; + String get aboutTranslatorsSectionTitle => 'ಅನುವಾದಕರು'; @override - String get aboutLicensesSectionTitle => 'Open-Source Licenses'; + String get aboutLicensesSectionTitle => 'ಮುಕ್ತ-ಮೂಲ ಪರವಾನಗಿಗಳು'; @override - String get aboutLicensesBanner => 'This app uses the following open-source packages and libraries.'; + String get aboutLicensesBanner => 'ಈ ಅಪ್ಲಿಕೇಶನ್ ಈ ಕೆಳಗಿನ ಮುಕ್ತ-ಮೂಲ ಪೊಟ್ಟಣಗಳು ಮತ್ತು ಭಂಡಾರಗಳನ್ನು ಬಳಸುತ್ತದೆ.'; @override - String get aboutLicensesAndroidLibrariesSectionTitle => 'Android Libraries'; + String get aboutLicensesAndroidLibrariesSectionTitle => 'ಆಂಡ್ರಾಯ್ಡ್ ಭಂಡಾರಗಳು'; @override - String get aboutLicensesFlutterPluginsSectionTitle => 'Flutter Plugins'; + String get aboutLicensesFlutterPluginsSectionTitle => 'ಫ್ಲಟರ್ ಪ್ಲಗಿನ್‌ಗಳು'; @override - String get aboutLicensesFlutterPackagesSectionTitle => 'Flutter Packages'; + String get aboutLicensesFlutterPackagesSectionTitle => 'ಫ್ಲಟರ್ ಪ್ಯಾಕೇಜುಗಳು'; @override - String get aboutLicensesDartPackagesSectionTitle => 'Dart Packages'; + String get aboutLicensesDartPackagesSectionTitle => 'ಡಾರ್ಟ್ ಪ್ಯಾಕೇಜುಗಳು'; @override - String get aboutLicensesShowAllButtonLabel => 'Show All Licenses'; + String get aboutLicensesShowAllButtonLabel => 'ಎಲ್ಲಾ ಪರವಾನಗಿಗಳನ್ನು ತೋರಿಸಿ'; @override - String get policyPageTitle => 'Privacy Policy'; + String get policyPageTitle => 'ಗೌಪ್ಯತೆ ನೀತಿ'; @override - String get collectionPageTitle => 'Collection'; + String get collectionPageTitle => 'ಸಂಗ್ರಹ'; @override - String get collectionPickPageTitle => 'Pick'; + String get collectionPickPageTitle => 'ಆರಿಸಿ'; @override - String get collectionSelectPageTitle => 'Select items'; + String get collectionSelectPageTitle => 'ವಸ್ತುಗಳನ್ನು ಆರಿಸಿ'; @override - String get collectionActionShowTitleSearch => 'Show title filter'; + String get collectionActionShowTitleSearch => 'ಶೀರ್ಷಿಕೆ ಸೋಸುಕ ತೋರಿಸಿ'; @override - String get collectionActionHideTitleSearch => 'Hide title filter'; + String get collectionActionHideTitleSearch => 'ಶೀರ್ಷಿಕೆ ಸೋಸುಕ ಅಡಗಿಸಿ'; @override - String get collectionActionAddDynamicAlbum => 'Add dynamic album'; + String get collectionActionAddDynamicAlbum => 'ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್ ಸೇರಿಸಿ'; @override - String get collectionActionAddShortcut => 'Add shortcut'; + String get collectionActionAddShortcut => 'ಶಾರ್ಟ್‌ಕಟ್ ಸೇರಿಸಿ'; @override - String get collectionActionSetHome => 'Set as home'; + String get collectionActionSetHome => 'ಮುಖಪುಟವಾಗಿ ಹೊಂದಿಸಿ'; @override - String get collectionActionEmptyBin => 'Empty bin'; + String get collectionActionEmptyBin => 'ತೊಟ್ಟಿಯನ್ನು ಖಾಲಿಮಾಡಿ'; @override - String get collectionActionCopy => 'Copy to album'; + String get collectionActionCopy => 'ಆಲ್ಬಮ್‌ಗೆ ನಕಲಿಸಿ'; @override - String get collectionActionMove => 'Move to album'; + String get collectionActionMove => 'ಆಲ್ಬಮ್‌ಗೆ ಸರಿಸಿ'; @override - String get collectionActionRescan => 'Rescan'; + String get collectionActionRescan => 'ಪುನಃ ಸ್ಕ್ಯಾನ್ ಮಾಡಿ'; @override - String get collectionActionEdit => 'Edit'; + String get collectionActionEdit => 'ಸಂಪಾದಿಸು'; @override - String get collectionSearchTitlesHintText => 'Search titles'; + String get collectionSearchTitlesHintText => 'ಶೀರ್ಷಿಕೆಗಳನ್ನು ಹುಡುಕಿ'; @override - String get collectionGroupAlbum => 'By album'; + String get collectionGroupAlbum => 'ಆಲ್ಬಮ್ ನಂತೆ'; @override - String get collectionGroupMonth => 'By month'; + String get collectionGroupMonth => 'ತಿಂಗಳಿನಂತೆ'; @override - String get collectionGroupDay => 'By day'; + String get collectionGroupDay => 'ದಿನದಂತೆ'; @override - String get collectionGroupNone => 'Do not group'; + String get collectionGroupNone => 'ಗುಂಪು ಮಾಡಬೇಡಿ'; @override - String get sectionUnknown => 'Unknown'; + String get sectionUnknown => 'ಅಜ್ಞಾತ'; @override - String get dateToday => 'Today'; + String get dateToday => 'ಇಂದು'; @override - String get dateYesterday => 'Yesterday'; + String get dateYesterday => 'ನಿನ್ನೆ'; @override - String get dateThisMonth => 'This month'; + String get dateThisMonth => 'ಈ ತಿಂಗಳು'; @override String collectionDeleteFailureFeedback(int count) { @@ -1283,8 +1283,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Failed to delete $countString items', - one: 'Failed to delete 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಅಳಿಸಲು ವಿಫಲವಾಗಿದೆ', ); return '$_temp0'; } @@ -1297,8 +1297,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Failed to copy $countString items', - one: 'Failed to copy 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ನಕಲಿಸಲು ವಿಫಲವಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ನಕಲಿಸಲು ವಿಫಲವಾಗಿದೆ', ); return '$_temp0'; } @@ -1311,8 +1311,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Failed to move $countString items', - one: 'Failed to move 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ವಿಫಲವಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ವಿಫಲವಾಗಿದೆ', ); return '$_temp0'; } @@ -1325,8 +1325,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Failed to rename $countString items', - one: 'Failed to rename 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಮರುಹೆಸರಿಸಲು ವಿಫಲವಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಮರುಹೆಸರಿಸಲು ವಿಫಲವಾಗಿದೆ', ); return '$_temp0'; } @@ -1339,8 +1339,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Failed to edit $countString items', - one: 'Failed to edit 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಸಂಪಾದಿಸಲು ವಿಫಲವಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಸಂಪಾದಿಸಲು ವಿಫಲವಾಗಿದೆ', ); return '$_temp0'; } @@ -1353,8 +1353,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Failed to export $countString pages', - one: 'Failed to export 1 page', + other: '$countString ಪುಟಗಳನ್ನು ರಫ್ತು ಮಾಡಲು ವಿಫಲವಾಗಿದೆ', + one: '1 ಪುಟವನ್ನು ರಫ್ತು ಮಾಡಲು ವಿಫಲವಾಗಿದೆ', ); return '$_temp0'; } @@ -1367,8 +1367,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Copied $countString items', - one: 'Copied 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ನಕಲಿಸಲಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ನಕಲಿಸಲಾಗಿದೆ', ); return '$_temp0'; } @@ -1381,8 +1381,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Moved $countString items', - one: 'Moved 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಸ್ಥಳಾಂತರಿಸಲಾಗಿದೆ', ); return '$_temp0'; } @@ -1395,8 +1395,8 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Renamed $countString items', - one: 'Renamed 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಮರುಹೆಸರಿಸಲಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಮರುಹೆಸರಿಸಲಾಗಿದೆ', ); return '$_temp0'; } @@ -1409,761 +1409,761 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'Edited $countString items', - one: 'Edited 1 item', + other: '$countString ವಸ್ತುಗಳನ್ನು ಸಂಪಾದಿಸಲಾಗಿದೆ', + one: '1 ವಸ್ತುವನ್ನು ಸಂಪಾದಿಸಲಾಗಿದೆ', ); return '$_temp0'; } @override - String get collectionEmptyFavourites => 'No favorites'; + String get collectionEmptyFavourites => 'ಮೆಚ್ಚಿನವುಗಳಿಲ್ಲ'; @override - String get collectionEmptyVideos => 'No videos'; + String get collectionEmptyVideos => 'ವೀಡಿಯೊಗಳಿಲ್ಲ'; @override - String get collectionEmptyImages => 'No images'; + String get collectionEmptyImages => 'ಚಿತ್ರಗಳಿಲ್ಲ'; @override - String get collectionEmptyGrantAccessButtonLabel => 'Grant access'; + String get collectionEmptyGrantAccessButtonLabel => 'ಪ್ರವೇಶವನ್ನು ನೀಡಿ'; @override - String get collectionSelectSectionTooltip => 'Select section'; + String get collectionSelectSectionTooltip => 'ವಿಭಾಗವನ್ನು ಆಯ್ಕೆಮಾಡಿ'; @override - String get collectionDeselectSectionTooltip => 'Deselect section'; + String get collectionDeselectSectionTooltip => 'ವಿಭಾಗ ಆಯ್ಕೆ ರದ್ದುಮಾಡಿ'; @override - String get drawerAboutButton => 'About'; + String get drawerAboutButton => 'ಕುರಿತು'; @override - String get drawerSettingsButton => 'Settings'; + String get drawerSettingsButton => 'ಸಂಯೋಜನೆಗಳು'; @override - String get drawerCollectionAll => 'All collection'; + String get drawerCollectionAll => 'ಎಲ್ಲಾ ಸಂಗ್ರಹ'; @override - String get drawerCollectionFavourites => 'Favorites'; + String get drawerCollectionFavourites => 'ಮೆಚ್ಚಿನವುಗಳು'; @override - String get drawerCollectionImages => 'Images'; + String get drawerCollectionImages => 'ಚಿತ್ರಗಳು'; @override - String get drawerCollectionVideos => 'Videos'; + String get drawerCollectionVideos => 'ವೀಡಿಯೊಗಳು'; @override - String get drawerCollectionAnimated => 'Animated'; + String get drawerCollectionAnimated => 'ಅನಿಮೇಟೆಡ್'; @override - String get drawerCollectionMotionPhotos => 'Motion photos'; + String get drawerCollectionMotionPhotos => 'ಚಲಿಸುವ ಚಿತ್ರಗಳು'; @override - String get drawerCollectionPanoramas => 'Panoramas'; + String get drawerCollectionPanoramas => 'ಪನೋರಮಾಗಳು'; @override - String get drawerCollectionRaws => 'Raw photos'; + String get drawerCollectionRaws => 'Raw ಚಿತ್ರಗಳು'; @override - String get drawerCollectionSphericalVideos => '360° Videos'; + String get drawerCollectionSphericalVideos => '360° ವಿಡಿಯೋಗಳು'; @override - String get drawerAlbumPage => 'Albums'; + String get drawerAlbumPage => 'ಆಲ್ಬಮ್ ಗಳು'; @override - String get drawerCountryPage => 'Countries'; + String get drawerCountryPage => 'ದೇಶಗಳು'; @override - String get drawerPlacePage => 'Places'; + String get drawerPlacePage => 'ಸ್ಥಳಗಳು'; @override - String get drawerTagPage => 'Tags'; + String get drawerTagPage => 'ಟ್ಯಾಗುಗಳು'; @override - String get sortByDate => 'By date'; + String get sortByDate => 'ದಿನಾಂಕದಂತೆ'; @override - String get sortByName => 'By name'; + String get sortByName => 'ಹೆಸರಿನಂತೆ'; @override - String get sortByItemCount => 'By item count'; + String get sortByItemCount => 'ವಸ್ತುಗಳ ಎಣಿಕೆಯಂತೆ'; @override - String get sortBySize => 'By size'; + String get sortBySize => 'ಗಾತ್ರದಂತೆ'; @override - String get sortByAlbumFileName => 'By album & file name'; + String get sortByAlbumFileName => 'ಆಲ್ಬಮ್ ಮತ್ತು ಕಡತದ ಹೆಸರಿನಂತೆ'; @override - String get sortByRating => 'By rating'; + String get sortByRating => 'ದರದಂತೆ'; @override - String get sortByDuration => 'By duration'; + String get sortByDuration => 'ಅವಧಿಯಂತೆ'; @override - String get sortOrderNewestFirst => 'Newest first'; + String get sortOrderNewestFirst => 'ಹೊಸದು ಮೊದಲು'; @override - String get sortOrderOldestFirst => 'Oldest first'; + String get sortOrderOldestFirst => 'ಹಳೆಯದು ಮೊದಲು'; @override - String get sortOrderAtoZ => 'A to Z'; + String get sortOrderAtoZ => 'ವರ್ಣಮಾಲೆಯಂತೆ (A to Z)'; @override - String get sortOrderZtoA => 'Z to A'; + String get sortOrderZtoA => 'ವರ್ಣಮಾಲೆಯ ವಿರುದ್ಧವಾಗಿ (Z to A)'; @override - String get sortOrderHighestFirst => 'Highest first'; + String get sortOrderHighestFirst => 'ಹೆಚ್ಚಿನದು ಮೊದಲು'; @override - String get sortOrderLowestFirst => 'Lowest first'; + String get sortOrderLowestFirst => 'ಕಡಿಮೆಯದು ಮೊದಲು'; @override - String get sortOrderLargestFirst => 'Largest first'; + String get sortOrderLargestFirst => 'ದೊಡ್ಡದು ಮೊದಲು'; @override - String get sortOrderSmallestFirst => 'Smallest first'; + String get sortOrderSmallestFirst => 'ಚಿಕ್ಕದು ಮೊದಲು'; @override - String get sortOrderShortestFirst => 'Shortest first'; + String get sortOrderShortestFirst => 'ಗಿಡ್ಡದ್ದು ಮೊದಲು'; @override - String get sortOrderLongestFirst => 'Longest first'; + String get sortOrderLongestFirst => 'ಉದ್ದದ್ದು ಮೊದಲು'; @override - String get albumGroupTier => 'By tier'; + String get albumGroupTier => 'ಶ್ರೇಣಿಯಂತೆ'; @override - String get albumGroupType => 'By type'; + String get albumGroupType => 'ಪ್ರಕಾರದಂತೆ'; @override - String get albumGroupVolume => 'By storage volume'; + String get albumGroupVolume => 'ಸಂಗ್ರಹಣೆಯ ಗಾತ್ರದಂತೆ'; @override - String get albumGroupNone => 'Do not group'; + String get albumGroupNone => 'ಗುಂಪು ಮಾಡಬೇಡಿ'; @override - String get albumMimeTypeMixed => 'Mixed'; + String get albumMimeTypeMixed => 'ಮಿಶ್ರಿತ'; @override - String get albumPickPageTitleCopy => 'Copy to Album'; + String get albumPickPageTitleCopy => 'ಆಲ್ಬಮ್‌ಗೆ ನಕಲಿಸಿ'; @override - String get albumPickPageTitleExport => 'Export to Album'; + String get albumPickPageTitleExport => 'ಆಲ್ಬಮ್‌ಗೆ ರಫ್ತು ಮಾಡಿ'; @override - String get albumPickPageTitleMove => 'Move to Album'; + String get albumPickPageTitleMove => 'ಆಲ್ಬಮ್‌ಗೆ ಸ್ಥಳಾಂತರಿಸಿ'; @override - String get albumPickPageTitlePick => 'Pick Album'; + String get albumPickPageTitlePick => 'ಆಲ್ಬಮ್ ಆಯ್ಕೆಮಾಡಿ'; @override - String get albumCamera => 'Camera'; + String get albumCamera => 'ಕ್ಯಾಮೆರಾ'; @override - String get albumDownload => 'Download'; + String get albumDownload => 'ಇಳಿಸು'; @override - String get albumScreenshots => 'Screenshots'; + String get albumScreenshots => 'ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳು'; @override - String get albumScreenRecordings => 'Screen recordings'; + String get albumScreenRecordings => 'ಪರದೆ ಮುದ್ರಿಕೆಗಳು'; @override - String get albumVideoCaptures => 'Video Captures'; + String get albumVideoCaptures => 'ವಿಡಿಯೋ ಕೈಸೆರೆಗಳು'; @override - String get albumPageTitle => 'Albums'; + String get albumPageTitle => 'ಆಲ್ಬಮ್ ಗಳು'; @override - String get albumEmpty => 'No albums'; + String get albumEmpty => 'ಆಲ್ಬಮ್‌ಗಳಿಲ್ಲ'; @override - String get createAlbumButtonLabel => 'CREATE'; + String get createAlbumButtonLabel => 'ರಚಿಸು'; @override - String get newFilterBanner => 'new'; + String get newFilterBanner => 'ಹೊಸ'; @override - String get countryPageTitle => 'Countries'; + String get countryPageTitle => 'ದೇಶಗಳು'; @override - String get countryEmpty => 'No countries'; + String get countryEmpty => 'ದೇಶಗಳಿಲ್ಲ'; @override - String get statePageTitle => 'States'; + String get statePageTitle => 'ರಾಜ್ಯಗಳು'; @override - String get stateEmpty => 'No states'; + String get stateEmpty => 'ರಾಜ್ಯಗಳಿಲ್ಲ'; @override - String get placePageTitle => 'Places'; + String get placePageTitle => 'ಸ್ಥಳಗಳು'; @override - String get placeEmpty => 'No places'; + String get placeEmpty => 'ಸ್ಥಳಗಳಿಲ್ಲ'; @override - String get tagPageTitle => 'Tags'; + String get tagPageTitle => 'ಟ್ಯಾಗುಗಳು'; @override - String get tagEmpty => 'No tags'; + String get tagEmpty => 'ಟ್ಯಾಗುಗಳಿಲ್ಲ'; @override - String get binPageTitle => 'Recycle Bin'; + String get binPageTitle => 'ಮರುಬಳಕೆ ತೊಟ್ಟಿ'; @override - String get explorerPageTitle => 'Explorer'; + String get explorerPageTitle => 'ಪರಿಶೋಧಕ'; @override - String get explorerActionSelectStorageVolume => 'Select storage'; + String get explorerActionSelectStorageVolume => 'ಸಂಗ್ರಹಣೆ ಆಯ್ಕೆ ಮಾಡಿ'; @override - String get selectStorageVolumeDialogTitle => 'Select Storage'; + String get selectStorageVolumeDialogTitle => 'ಸಂಗ್ರಹಣೆ ಆಯ್ಕೆ ಮಾಡಿ'; @override - String get searchCollectionFieldHint => 'Search collection'; + String get searchCollectionFieldHint => 'ಸಂಗ್ರಹದಲ್ಲಿ ಹುಡುಕಿ'; @override - String get searchRecentSectionTitle => 'Recent'; + String get searchRecentSectionTitle => 'ಇತ್ತೀಚಿನವು'; @override - String get searchDateSectionTitle => 'Date'; + String get searchDateSectionTitle => 'ದಿನಾಂಕ'; @override - String get searchAlbumsSectionTitle => 'Albums'; + String get searchAlbumsSectionTitle => 'ಆಲ್ಬಮ್ ಗಳು'; @override - String get searchCountriesSectionTitle => 'Countries'; + String get searchCountriesSectionTitle => 'ದೇಶಗಳು'; @override - String get searchStatesSectionTitle => 'States'; + String get searchStatesSectionTitle => 'ರಾಜ್ಯಗಳು'; @override - String get searchPlacesSectionTitle => 'Places'; + String get searchPlacesSectionTitle => 'ಸ್ಥಳಗಳು'; @override - String get searchTagsSectionTitle => 'Tags'; + String get searchTagsSectionTitle => 'ಟ್ಯಾಗುಗಳು'; @override - String get searchRatingSectionTitle => 'Ratings'; + String get searchRatingSectionTitle => 'ದರಗಳು'; @override - String get searchMetadataSectionTitle => 'Metadata'; + String get searchMetadataSectionTitle => 'ಮೆಟಾಡೇಟಾ'; @override - String get settingsPageTitle => 'Settings'; + String get settingsPageTitle => 'ಸಂಯೋಜನೆಗಳು'; @override - String get settingsSystemDefault => 'System default'; + String get settingsSystemDefault => 'ಸಿಸ್ಟಮ್ ಡೀಫಾಲ್ಟ್'; @override - String get settingsDefault => 'Default'; + String get settingsDefault => 'ಡೀಫಾಲ್ಟ್'; @override - String get settingsDisabled => 'Disabled'; + String get settingsDisabled => 'ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ'; @override - String get settingsAskEverytime => 'Ask everytime'; + String get settingsAskEverytime => 'ಪ್ರತಿಬಾರಿಯೂ ಕೇಳಿ'; @override - String get settingsModificationWarningDialogMessage => 'Other settings will be modified.'; + String get settingsModificationWarningDialogMessage => 'ಇತರ ಸಂಯೋಜನೆಗಳನ್ನು ಮಾರ್ಪಡಿಸಲಾಗುತ್ತದೆ.'; @override - String get settingsSearchFieldLabel => 'Search settings'; + String get settingsSearchFieldLabel => 'ಸಂಯೋಜನೆಗಳಲ್ಲಿ ಹುಡುಕಿ'; @override - String get settingsSearchEmpty => 'No matching setting'; + String get settingsSearchEmpty => 'ಹೊಂದುವ ಸಂಯೋಜನೆಗಳಿಲ್ಲ'; @override - String get settingsActionExport => 'Export'; + String get settingsActionExport => 'ರಫ್ತು'; @override - String get settingsActionExportDialogTitle => 'Export'; + String get settingsActionExportDialogTitle => 'ರಫ್ತು'; @override - String get settingsActionImport => 'Import'; + String get settingsActionImport => 'ಆಮದು'; @override - String get settingsActionImportDialogTitle => 'Import'; + String get settingsActionImportDialogTitle => 'ಆಮದು'; @override - String get appExportCovers => 'Covers'; + String get appExportCovers => 'ರಕ್ಷಾಕವಚಗಳು'; @override - String get appExportDynamicAlbums => 'Dynamic albums'; + String get appExportDynamicAlbums => 'ಡೈನಾಮಿಕ್ ಆಲ್ಬಮ್ ಗಳು'; @override - String get appExportFavourites => 'Favorites'; + String get appExportFavourites => 'ಮೆಚ್ಚಿನವುಗಳು'; @override - String get appExportSettings => 'Settings'; + String get appExportSettings => 'ಸಂಯೋಜನೆಗಳು'; @override - String get settingsNavigationSectionTitle => 'Navigation'; + String get settingsNavigationSectionTitle => 'ಸಂಚಾರ'; @override - String get settingsHomeTile => 'Home'; + String get settingsHomeTile => 'ಮುಖಪುಟ'; @override - String get settingsHomeDialogTitle => 'Home'; + String get settingsHomeDialogTitle => 'ಮುಖಪುಟ'; @override - String get setHomeCustom => 'Custom'; + String get setHomeCustom => 'ಇಚ್ಛಾನುಸಾರ'; @override - String get settingsShowBottomNavigationBar => 'Show bottom navigation bar'; + String get settingsShowBottomNavigationBar => 'ಕೆಳಗಿನ ಸಂಚಾರಪಟ್ಟೆಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsKeepScreenOnTile => 'Keep screen on'; + String get settingsKeepScreenOnTile => 'ಪರದೆಯನ್ನು ಚಾಲೂ ಇಡಿ'; @override - String get settingsKeepScreenOnDialogTitle => 'Keep Screen On'; + String get settingsKeepScreenOnDialogTitle => 'ಪರದೆಯನ್ನು ಚಾಲೂ ಇಡಿ'; @override - String get settingsDoubleBackExit => 'Tap “back” twice to exit'; + String get settingsDoubleBackExit => 'ನಿರ್ಗಮಿಸಲು “ಹಿಂದೆ” ಎರಡು ಬಾರಿ ತಟ್ಟಿ'; @override - String get settingsConfirmationTile => 'Confirmation dialogs'; + String get settingsConfirmationTile => 'ದೃಢೀಕರಣ ಸಂವಾದಗಳು'; @override - String get settingsConfirmationDialogTitle => 'Confirmation Dialogs'; + String get settingsConfirmationDialogTitle => 'ದೃಢೀಕರಣ ಸಂವಾದಗಳು'; @override - String get settingsConfirmationBeforeDeleteItems => 'Ask before deleting items forever'; + String get settingsConfirmationBeforeDeleteItems => 'ವಸ್ತುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುವ ಮೊದಲು ವಿಚಾರಿಸಿ'; @override - String get settingsConfirmationBeforeMoveToBinItems => 'Ask before moving items to the recycle bin'; + String get settingsConfirmationBeforeMoveToBinItems => 'ವಸ್ತುಗಳನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸುವ ಮೊದಲು ವಿಚಾರಿಸಿ'; @override - String get settingsConfirmationBeforeMoveUndatedItems => 'Ask before moving undated items'; + String get settingsConfirmationBeforeMoveUndatedItems => 'ದಿನಾಂಕವಿಲ್ಲದ ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸುವ ಮೊದಲು ವಿಚಾರಿಸಿ'; @override - String get settingsConfirmationAfterMoveToBinItems => 'Show message after moving items to the recycle bin'; + String get settingsConfirmationAfterMoveToBinItems => 'ವಸ್ತುಗಳನ್ನು ಮರುಬಳಕೆ ತೊಟ್ಟಿಗೆ ಸ್ಥಳಾಂತರಿಸಿದ ನಂತರ ಸಂದೇಶವನ್ನು ತೋರಿಸಿ'; @override - String get settingsConfirmationVaultDataLoss => 'Show vault data loss warning'; + String get settingsConfirmationVaultDataLoss => 'ನೆಲಮಾಳಿಗೆಯ ದತ್ತಾಂಶ ನಷ್ಟವಾಗುವುದನ್ನು ಎಚ್ಚರಿಸಿ'; @override - String get settingsNavigationDrawerTile => 'Navigation menu'; + String get settingsNavigationDrawerTile => 'ನ್ಯಾವಿಗೇಷನ್ ಮೆನು'; @override - String get settingsNavigationDrawerEditorPageTitle => 'Navigation Menu'; + String get settingsNavigationDrawerEditorPageTitle => 'ನ್ಯಾವಿಗೇಷನ್ ಮೆನು'; @override - String get settingsNavigationDrawerBanner => 'Touch and hold to move and reorder menu items.'; + String get settingsNavigationDrawerBanner => 'ಮೆನು ವಸ್ತುಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಮತ್ತು ಮರುಕ್ರಮಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ.'; @override - String get settingsNavigationDrawerTabTypes => 'Types'; + String get settingsNavigationDrawerTabTypes => 'ಪ್ರಕಾರಗಳು'; @override - String get settingsNavigationDrawerTabAlbums => 'Albums'; + String get settingsNavigationDrawerTabAlbums => 'ಆಲ್ಬಮ್ ಗಳು'; @override - String get settingsNavigationDrawerTabPages => 'Pages'; + String get settingsNavigationDrawerTabPages => 'ಪುಟಗಳು'; @override - String get settingsNavigationDrawerAddAlbum => 'Add album'; + String get settingsNavigationDrawerAddAlbum => 'ಆಲ್ಬಮ್ ಸೇರಿಸಿ'; @override - String get settingsThumbnailSectionTitle => 'Thumbnails'; + String get settingsThumbnailSectionTitle => 'ಥಂಬ್‌ನೇಲ್‌ಗಳು'; @override - String get settingsThumbnailOverlayTile => 'Overlay'; + String get settingsThumbnailOverlayTile => 'ಮೇಲ್ಪದರ'; @override - String get settingsThumbnailOverlayPageTitle => 'Overlay'; + String get settingsThumbnailOverlayPageTitle => 'ಮೇಲ್ಪದರ'; @override - String get settingsThumbnailShowHdrIcon => 'Show HDR icon'; + String get settingsThumbnailShowHdrIcon => 'HDR ಸಂಕೇತ ತೋರಿಸಿ'; @override - String get settingsThumbnailShowFavouriteIcon => 'Show favorite icon'; + String get settingsThumbnailShowFavouriteIcon => 'ಮೆಚ್ಚಿನ ಸಂಕೇತ ತೋರಿಸಿ'; @override - String get settingsThumbnailShowTagIcon => 'Show tag icon'; + String get settingsThumbnailShowTagIcon => 'ಟ್ಯಾಗು ಸಂಕೇತ ತೋರಿಸಿ'; @override - String get settingsThumbnailShowLocationIcon => 'Show location icon'; + String get settingsThumbnailShowLocationIcon => 'ಸ್ಥಳದ ಚಿನ್ಹೆಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsThumbnailShowMotionPhotoIcon => 'Show motion photo icon'; + String get settingsThumbnailShowMotionPhotoIcon => 'ಚಲನಾ ಚಿತ್ರದ ಚಿನ್ಹೆಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsThumbnailShowRating => 'Show rating'; + String get settingsThumbnailShowRating => 'ದರವನ್ನು ತೋರಿಸಿ'; @override - String get settingsThumbnailShowRawIcon => 'Show raw icon'; + String get settingsThumbnailShowRawIcon => 'Raw ಚಿನ್ಹೆಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsThumbnailShowVideoDuration => 'Show video duration'; + String get settingsThumbnailShowVideoDuration => 'ವಿಡಿಯೋ ಕಾಲಾವಧಿಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsCollectionQuickActionsTile => 'Quick actions'; + String get settingsCollectionQuickActionsTile => 'ತ್ವರಿತ ಕ್ರಮಗಳು'; @override - String get settingsCollectionQuickActionEditorPageTitle => 'Quick Actions'; + String get settingsCollectionQuickActionEditorPageTitle => 'ತ್ವರಿತ ಕ್ರಮಗಳು'; @override - String get settingsCollectionQuickActionTabBrowsing => 'Browsing'; + String get settingsCollectionQuickActionTabBrowsing => 'ತಡಕಾಟ'; @override - String get settingsCollectionQuickActionTabSelecting => 'Selecting'; + String get settingsCollectionQuickActionTabSelecting => 'ಆರಿಸು'; @override - String get settingsCollectionBrowsingQuickActionEditorBanner => 'Touch and hold to move buttons and select which actions are displayed when browsing items.'; + String get settingsCollectionBrowsingQuickActionEditorBanner => 'ಗುಂಡಿಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು ವಸ್ತುಗಳನ್ನು ತಡಕಾಡುವಾಗ ಯಾವ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿ.'; @override - String get settingsCollectionSelectionQuickActionEditorBanner => 'Touch and hold to move buttons and select which actions are displayed when selecting items.'; + String get settingsCollectionSelectionQuickActionEditorBanner => 'ಗುಂಡಿಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು ವಸ್ತುಗಳನ್ನು ತಡಕಾಡುವಾಗ ಯಾವ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿಕೊಳ್ಳಿ.'; @override - String get settingsCollectionBurstPatternsTile => 'Burst patterns'; + String get settingsCollectionBurstPatternsTile => 'ಬರ್ಸ್ಟ್ ಪ್ರಕಾರಗಳು'; @override - String get settingsCollectionBurstPatternsNone => 'None'; + String get settingsCollectionBurstPatternsNone => 'ಏನಿಲ್ಲ'; @override - String get settingsViewerSectionTitle => 'Viewer'; + String get settingsViewerSectionTitle => 'ವೀಕ್ಷಕ'; @override - String get settingsViewerGestureSideTapNext => 'Tap on screen edges to show previous/next item'; + String get settingsViewerGestureSideTapNext => 'ಹಿಂದಿನ/ಮುಂದಿನ ವಸ್ತುವನ್ನು ತೋರಿಸಲು ಪರದೆಯ ಅಂಚಿನ ಮೇಲೆ ತಟ್ಟಿ'; @override - String get settingsViewerUseCutout => 'Use cutout area'; + String get settingsViewerUseCutout => 'ಕಟೌಟ್ ಪ್ರದೇಶವನ್ನು ಬಳಸಿರಿ'; @override - String get settingsViewerMaximumBrightness => 'Maximum brightness'; + String get settingsViewerMaximumBrightness => 'ಗರಿಷ್ಟ ಪ್ರಕಾಶಮಯ'; @override - String get settingsMotionPhotoAutoPlay => 'Auto play motion photos'; + String get settingsMotionPhotoAutoPlay => 'ಚಾಲನಾ ಚಿತ್ರಗಳ ಸ್ವಯಂಚಾಲನೆ'; @override - String get settingsImageBackground => 'Image background'; + String get settingsImageBackground => 'ಚಿತ್ರದ ಹಿನ್ನೆಲೆ'; @override - String get settingsViewerQuickActionsTile => 'Quick actions'; + String get settingsViewerQuickActionsTile => 'ತ್ವರಿತ ಕ್ರಮಗಳು'; @override - String get settingsViewerQuickActionEditorPageTitle => 'Quick Actions'; + String get settingsViewerQuickActionEditorPageTitle => 'ತ್ವರಿತ ಕ್ರಮಗಳು'; @override - String get settingsViewerQuickActionEditorBanner => 'Touch and hold to move buttons and select which actions are displayed in the viewer.'; + String get settingsViewerQuickActionEditorBanner => 'ಗುಂಡಿಗಳನ್ನು ಸ್ಥಳಾಂತರಿಸಲು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಹಿಡಿದುಕೊಳ್ಳಿ ಮತ್ತು ವೀಕ್ಷಕದಲ್ಲಿ ಯಾವ ಕ್ರಿಯೆಗಳನ್ನು ಪ್ರದರ್ಶಿಸಬೇಕು ಎಂಬುದನ್ನು ಆರಿಸಿ.'; @override - String get settingsViewerQuickActionEditorDisplayedButtonsSectionTitle => 'Displayed Buttons'; + String get settingsViewerQuickActionEditorDisplayedButtonsSectionTitle => 'ಪ್ರದರ್ಶಿತ ಗುಂಡಿಗಳು'; @override - String get settingsViewerQuickActionEditorAvailableButtonsSectionTitle => 'Available Buttons'; + String get settingsViewerQuickActionEditorAvailableButtonsSectionTitle => 'ಲಭ್ಯವಿರುವ ಗುಂಡಿಗಳು'; @override - String get settingsViewerQuickActionEmpty => 'No buttons'; + String get settingsViewerQuickActionEmpty => 'ಗುಂಡಿಗಳಿಲ್ಲ'; @override - String get settingsViewerOverlayTile => 'Overlay'; + String get settingsViewerOverlayTile => 'ಮೇಲ್ಪದರ'; @override - String get settingsViewerOverlayPageTitle => 'Overlay'; + String get settingsViewerOverlayPageTitle => 'ಮೇಲ್ಪದರ'; @override - String get settingsViewerShowOverlayOnOpening => 'Show on opening'; + String get settingsViewerShowOverlayOnOpening => 'ಪ್ರಾರಂಭದಲ್ಲಿ ತೋರಿಸಿ'; @override - String get settingsViewerShowHistogram => 'Show histogram'; + String get settingsViewerShowHistogram => 'ಹಿಸ್ಟೋಗ್ರಾಮ್ ತೋರಿಸಿ'; @override - String get settingsViewerShowMinimap => 'Show minimap'; + String get settingsViewerShowMinimap => 'ಚಿಕ್ಕನಕ್ಷೆಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsViewerShowInformation => 'Show information'; + String get settingsViewerShowInformation => 'ಮಾಹಿತಿಯನ್ನು ತೋರಿಸಿ'; @override - String get settingsViewerShowInformationSubtitle => 'Show title, date, location, etc.'; + String get settingsViewerShowInformationSubtitle => 'ಶೀರ್ಷಿಕೆ, ದಿನಾಂಕ, ಸ್ಥಳ ಇತ್ಯಾದಿಗಳನ್ನು ತೋರಿಸಿ.'; @override - String get settingsViewerShowRatingTags => 'Show rating & tags'; + String get settingsViewerShowRatingTags => 'ದರಗಳು ಮತ್ತು ಟ್ಯಾಗುಗಳನ್ನು ತೋರಿಸಿ'; @override - String get settingsViewerShowShootingDetails => 'Show shooting details'; + String get settingsViewerShowShootingDetails => 'ಸೆರೆಹಿಡಿದ ವಿವರಗಳನ್ನು ತೋರಿಸಿ'; @override - String get settingsViewerShowDescription => 'Show description'; + String get settingsViewerShowDescription => 'ವಿವರಣೆಗಳನ್ನು ತೋರಿಸಿ'; @override - String get settingsViewerShowOverlayThumbnails => 'Show thumbnails'; + String get settingsViewerShowOverlayThumbnails => 'ಅಡಕವನ್ನು ತೋರಿಸಿ'; @override - String get settingsViewerEnableOverlayBlurEffect => 'Blur effect'; + String get settingsViewerEnableOverlayBlurEffect => 'ಮಸುಕು ಪರಿಣಾಮ'; @override - String get settingsViewerSlideshowTile => 'Slideshow'; + String get settingsViewerSlideshowTile => 'ಜಾರುಫಲಕ'; @override - String get settingsViewerSlideshowPageTitle => 'Slideshow'; + String get settingsViewerSlideshowPageTitle => 'ಜಾರುಫಲಕ'; @override - String get settingsSlideshowRepeat => 'Repeat'; + String get settingsSlideshowRepeat => 'ಪುನರಾವರ್ತನೆ'; @override - String get settingsSlideshowShuffle => 'Shuffle'; + String get settingsSlideshowShuffle => 'ಕಲಸು'; @override - String get settingsSlideshowFillScreen => 'Fill screen'; + String get settingsSlideshowFillScreen => 'ಪೂರ್ಣ ಪರದೆ'; @override - String get settingsSlideshowAnimatedZoomEffect => 'Animated zoom effect'; + String get settingsSlideshowAnimatedZoomEffect => 'ಅನಿಮೇಟೆಡ್ ಹಿಗ್ಗಿಸಿದ ಪರಿಣಾಮ'; @override - String get settingsSlideshowTransitionTile => 'Transition'; + String get settingsSlideshowTransitionTile => 'ಪರಿವರ್ತನೆ'; @override - String get settingsSlideshowIntervalTile => 'Interval'; + String get settingsSlideshowIntervalTile => 'ಮಧ್ಯಂತರ'; @override - String get settingsSlideshowVideoPlaybackTile => 'Video playback'; + String get settingsSlideshowVideoPlaybackTile => 'ವಿಡಿಯೋ ಪ್ಲೇಬ್ಯಾಕ್'; @override - String get settingsSlideshowVideoPlaybackDialogTitle => 'Video Playback'; + String get settingsSlideshowVideoPlaybackDialogTitle => 'ವಿಡಿಯೋ ಪ್ಲೇಬ್ಯಾಕ್'; @override - String get settingsVideoPageTitle => 'Video Settings'; + String get settingsVideoPageTitle => 'ವಿಡಿಯೋ ಸಂಯೋಜನೆಗಳು'; @override - String get settingsVideoSectionTitle => 'Video'; + String get settingsVideoSectionTitle => 'ವಿಡಿಯೋ'; @override - String get settingsVideoShowVideos => 'Show videos'; + String get settingsVideoShowVideos => 'ವಿಡಿಯೋಗಳನ್ನು ತೋರಿಸಿ'; @override - String get settingsVideoPlaybackTile => 'Playback'; + String get settingsVideoPlaybackTile => 'ಪ್ಲೇಬ್ಯಾಕ್'; @override - String get settingsVideoPlaybackPageTitle => 'Playback'; + String get settingsVideoPlaybackPageTitle => 'ಪ್ಲೇಬ್ಯಾಕ್'; @override - String get settingsVideoEnableHardwareAcceleration => 'Hardware acceleration'; + String get settingsVideoEnableHardwareAcceleration => 'ಯಂತ್ರಾಂಶ ವೇಗವರ್ಧನೆ'; @override - String get settingsVideoAutoPlay => 'Auto play'; + String get settingsVideoAutoPlay => 'ಸ್ವಯಂ ಚಾಲನೆ'; @override - String get settingsVideoLoopModeTile => 'Loop mode'; + String get settingsVideoLoopModeTile => 'ಆವರ್ತನ ಕ್ರಮ'; @override - String get settingsVideoLoopModeDialogTitle => 'Loop Mode'; + String get settingsVideoLoopModeDialogTitle => 'ಆವರ್ತನ ಕ್ರಮ'; @override - String get settingsVideoResumptionModeTile => 'Resume playback'; + String get settingsVideoResumptionModeTile => 'ಮುಂದುವರೆಸು'; @override - String get settingsVideoResumptionModeDialogTitle => 'Resume Playback'; + String get settingsVideoResumptionModeDialogTitle => 'ಮುಂದುವರೆಸು'; @override - String get settingsVideoBackgroundMode => 'Background mode'; + String get settingsVideoBackgroundMode => 'ಹಿನ್ನೆಲೆ ಕ್ರಮ'; @override - String get settingsVideoBackgroundModeDialogTitle => 'Background Mode'; + String get settingsVideoBackgroundModeDialogTitle => 'ಹಿನ್ನೆಲೆ ಕ್ರಮ'; @override - String get settingsVideoControlsTile => 'Controls'; + String get settingsVideoControlsTile => 'ನಿಯಂತ್ರಣಗಳು'; @override - String get settingsVideoControlsPageTitle => 'Controls'; + String get settingsVideoControlsPageTitle => 'ನಿಯಂತ್ರಣಗಳು'; @override - String get settingsVideoButtonsTile => 'Buttons'; + String get settingsVideoButtonsTile => 'ಒತ್ತುಗುಂಡಿಗಳು'; @override - String get settingsVideoGestureDoubleTapTogglePlay => 'Double tap to play/pause'; + String get settingsVideoGestureDoubleTapTogglePlay => 'ಚಾಲನೆ/ವಿರಾಮ ಮಾಡಲು ದ್ವಿಗುಣ ತಟ್ಟಿ'; @override - String get settingsVideoGestureSideDoubleTapSeek => 'Double tap on screen edges to seek backward/forward'; + String get settingsVideoGestureSideDoubleTapSeek => 'ಮುಂದೆ/ಹಿಂದೆ ಚಲಿಸಲು ಪರದೆಯ ಅಂಚಿನಲ್ಲಿ ಮಾಡಲು ದ್ವಿಗುಣ ತಟ್ಟಿ'; @override - String get settingsVideoGestureVerticalDragBrightnessVolume => 'Swipe up or down to adjust brightness/volume'; + String get settingsVideoGestureVerticalDragBrightnessVolume => 'ಪ್ರಕಾಶ/ಶಬ್ದಪ್ರಮಾಣ ಹೊಂದಿಸಲು ಮೇಲಕ್ಕೆ ಅಥವಾ ಕೆಳಕ್ಕೆ ಜಾರಿಸಿ'; @override - String get settingsSubtitleThemeTile => 'Subtitles'; + String get settingsSubtitleThemeTile => 'ಅಡಿಬರಹ'; @override - String get settingsSubtitleThemePageTitle => 'Subtitles'; + String get settingsSubtitleThemePageTitle => 'ಅಡಿಬರಹ'; @override - String get settingsSubtitleThemeSample => 'This is a sample.'; + String get settingsSubtitleThemeSample => 'ಇದು ಒಂದು ನಮೂನೆ.'; @override - String get settingsSubtitleThemeTextAlignmentTile => 'Text alignment'; + String get settingsSubtitleThemeTextAlignmentTile => 'ಪಠ್ಯ ಜೋಡಣೆ'; @override - String get settingsSubtitleThemeTextAlignmentDialogTitle => 'Text Alignment'; + String get settingsSubtitleThemeTextAlignmentDialogTitle => 'ಪಠ್ಯ ಜೋಡಣೆ'; @override - String get settingsSubtitleThemeTextPositionTile => 'Text position'; + String get settingsSubtitleThemeTextPositionTile => 'ಪಠ್ಯ ಸ್ಥಾನ'; @override - String get settingsSubtitleThemeTextPositionDialogTitle => 'Text Position'; + String get settingsSubtitleThemeTextPositionDialogTitle => 'ಪಠ್ಯ ಸ್ಥಾನ'; @override - String get settingsSubtitleThemeTextSize => 'Text size'; + String get settingsSubtitleThemeTextSize => 'ಪಠ್ಯದ ಗಾತ್ರ'; @override - String get settingsSubtitleThemeShowOutline => 'Show outline and shadow'; + String get settingsSubtitleThemeShowOutline => 'ಬಾಹ್ಯರೇಖೆ ಮತ್ತು ನೆರಳನ್ನು ತೋರಿಸಿ'; @override - String get settingsSubtitleThemeTextColor => 'Text color'; + String get settingsSubtitleThemeTextColor => 'ಪಠ್ಯದ ಬಣ್ಣ'; @override - String get settingsSubtitleThemeTextOpacity => 'Text opacity'; + String get settingsSubtitleThemeTextOpacity => 'ಪಠ್ಯದ ಪಾರದರ್ಶಕತೆ'; @override - String get settingsSubtitleThemeBackgroundColor => 'Background color'; + String get settingsSubtitleThemeBackgroundColor => 'ಹಿನ್ನೆಲೆ ಬಣ್ಣ'; @override - String get settingsSubtitleThemeBackgroundOpacity => 'Background opacity'; + String get settingsSubtitleThemeBackgroundOpacity => 'ಹಿನ್ನೆಲೆ ಪಾರದರ್ಶಕತೆ'; @override - String get settingsSubtitleThemeTextAlignmentLeft => 'Left'; + String get settingsSubtitleThemeTextAlignmentLeft => 'ಎಡ'; @override - String get settingsSubtitleThemeTextAlignmentCenter => 'Center'; + String get settingsSubtitleThemeTextAlignmentCenter => 'ಮಧ್ಯ'; @override - String get settingsSubtitleThemeTextAlignmentRight => 'Right'; + String get settingsSubtitleThemeTextAlignmentRight => 'ಬಲ'; @override - String get settingsPrivacySectionTitle => 'Privacy'; + String get settingsPrivacySectionTitle => 'ಗೌಪ್ಯತೆ'; @override - String get settingsAllowInstalledAppAccess => 'Allow access to app inventory'; + String get settingsAllowInstalledAppAccess => 'ಅಪ್ಲಿಕೇಶನ್ ಯಾದಿಗೆ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸಿ'; @override - String get settingsAllowInstalledAppAccessSubtitle => 'Used to improve album display'; + String get settingsAllowInstalledAppAccessSubtitle => 'ಆಲ್ಬಮ್ ಪ್ರದರ್ಶನವನ್ನು ಸುಧಾರಿಸಲು ಬಳಸಲಾಗುತ್ತದೆ'; @override - String get settingsAllowErrorReporting => 'Allow anonymous error reporting'; + String get settingsAllowErrorReporting => 'ಅನಾಮಧೇಯ ದೋಷ ವರದಿಯನ್ನು ಅನುಮತಿಸಿ'; @override - String get settingsSaveSearchHistory => 'Save search history'; + String get settingsSaveSearchHistory => 'ಹುಡುಕಾಟದ ಇತಿಹಾಸವನ್ನು ಉಳಿಸಿ'; @override - String get settingsEnableBin => 'Use recycle bin'; + String get settingsEnableBin => 'ಮರುಬಳಕೆಯ ತೊಟ್ಟಿಯನ್ನು ಬಳಸಿ'; @override - String get settingsEnableBinSubtitle => 'Keep deleted items for 30 days'; + String get settingsEnableBinSubtitle => 'ಅಳಿಸಿದ ವಸ್ತುಗಳನ್ನು 30 ದಿನಗಳವರೆಗೆ ಇರಿಸಿ'; @override - String get settingsDisablingBinWarningDialogMessage => 'Items in the recycle bin will be deleted forever.'; + String get settingsDisablingBinWarningDialogMessage => 'ಮರುಬಳಕೆ ತೊಟ್ಟಿಯಲ್ಲಿರುವ ವಸ್ತುಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸಲಾಗುತ್ತಿದೆ.'; @override - String get settingsAllowMediaManagement => 'Allow media management'; + String get settingsAllowMediaManagement => 'ಮಾಧ್ಯಮ ನಿರ್ವಹಣೆಯನ್ನು ಅನುಮತಿಸಿ'; @override - String get settingsHiddenItemsTile => 'Hidden items'; + String get settingsHiddenItemsTile => 'ಮರೆಮಾಡಿದ ವಸ್ತುಗಳು'; @override - String get settingsHiddenItemsPageTitle => 'Hidden Items'; + String get settingsHiddenItemsPageTitle => 'ಮರೆಮಾಡಿದ ವಸ್ತುಗಳು'; @override - String get settingsHiddenFiltersBanner => 'Photos and videos matching hidden filters will not appear in your collection.'; + String get settingsHiddenFiltersBanner => 'ಮರೆಮಾಡಿದ ಫಿಲ್ಟರ್‌ಗಳಿಗೆ ಹೊಂದಿಕೆಯಾಗುವ ಚಿತ್ರಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳು ನಿಮ್ಮ ಸಂಗ್ರಹಣೆಯಲ್ಲಿ ಗೋಚರಿಸುವುದಿಲ್ಲ.'; @override - String get settingsHiddenFiltersEmpty => 'No hidden filters'; + String get settingsHiddenFiltersEmpty => 'ಮರೆಮಾಡಿದ ಫಿಲ್ಟರ್‌ಗಳಿಲ್ಲ'; @override - String get settingsStorageAccessTile => 'Storage access'; + String get settingsStorageAccessTile => 'ಸಂಗ್ರಹಣೆ ಪ್ರವೇಶಾಧಿಕಾರ'; @override - String get settingsStorageAccessPageTitle => 'Storage Access'; + String get settingsStorageAccessPageTitle => 'ಸಂಗ್ರಹಣೆ ಪ್ರವೇಶಾಧಿಕಾರ'; @override - String get settingsStorageAccessBanner => 'Some directories require an explicit access grant to modify files in them. You can review here directories to which you previously gave access.'; + String get settingsStorageAccessBanner => 'ಕೆಲವು ಕೋಶಗಳಿಗೆ ಕಡತಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಸ್ಪಷ್ಟ ಪ್ರವೇಶವನ್ನು ಅನುಮತಿಸುವ ಅಗತ್ಯವಿದೆ. ನೀವು ಈ ಹಿಂದೆ ಪ್ರವೇಶವನ್ನು ನೀಡಿದ ಕೋಶಗಳನ್ನು ನೀವು ಇಲ್ಲಿ ಪರಿಶೀಲಿಸಬಹುದು.'; @override - String get settingsStorageAccessEmpty => 'No access grants'; + String get settingsStorageAccessEmpty => 'ಪ್ರವೇಶ ಅನುಮತಿಸಿಲ್ಲ'; @override - String get settingsStorageAccessRevokeTooltip => 'Revoke'; + String get settingsStorageAccessRevokeTooltip => 'ಹಿಂಪಡೆಯಿರಿ'; @override - String get settingsAccessibilitySectionTitle => 'Accessibility'; + String get settingsAccessibilitySectionTitle => 'ಎಟುಕು'; @override - String get settingsRemoveAnimationsTile => 'Remove animations'; + String get settingsRemoveAnimationsTile => 'ಅನಿಮೇಷನ್‌ಗಳನ್ನು ತೆಗೆದುಹಾಕಿ'; @override - String get settingsRemoveAnimationsDialogTitle => 'Remove Animations'; + String get settingsRemoveAnimationsDialogTitle => 'ಅನಿಮೇಷನ್‌ಗಳನ್ನು ತೆಗೆಯಿರಿ'; @override - String get settingsTimeToTakeActionTile => 'Time to take action'; + String get settingsTimeToTakeActionTile => 'ಕ್ರಮ ತೆಗೆದುಕೊಳ್ಳಲು ಸಮಯ'; @override - String get settingsAccessibilityShowPinchGestureAlternatives => 'Show multi-touch gesture alternatives'; + String get settingsAccessibilityShowPinchGestureAlternatives => 'ಬಹುಸ್ಪರ್ಶ ಗೆಸ್ಚರ್ ಪರ್ಯಾಯಗಳನ್ನು ತೋರಿಸಿ'; @override - String get settingsDisplaySectionTitle => 'Display'; + String get settingsDisplaySectionTitle => 'ಪ್ರದರ್ಶಕ'; @override - String get settingsThemeBrightnessTile => 'Theme'; + String get settingsThemeBrightnessTile => 'ಅಲಂಕಾರ'; @override - String get settingsThemeBrightnessDialogTitle => 'Theme'; + String get settingsThemeBrightnessDialogTitle => 'ಅಲಂಕಾರ'; @override - String get settingsThemeColorHighlights => 'Color highlights'; + String get settingsThemeColorHighlights => 'ಬಣ್ಣದ ಮುಖ್ಯಾಂಶಗಳು'; @override - String get settingsThemeEnableDynamicColor => 'Dynamic color'; + String get settingsThemeEnableDynamicColor => 'ಡೈನಾಮಿಕ್ ಬಣ್ಣ'; @override - String get settingsDisplayRefreshRateModeTile => 'Display refresh rate'; + String get settingsDisplayRefreshRateModeTile => 'ರಿಫ್ರೆಶ್ ದರವನ್ನು ಪ್ರದರ್ಶಿಸಿ'; @override - String get settingsDisplayRefreshRateModeDialogTitle => 'Refresh Rate'; + String get settingsDisplayRefreshRateModeDialogTitle => 'ರಿಫ್ರೆಶ್ ದರ'; @override - String get settingsDisplayUseTvInterface => 'Android TV interface'; + String get settingsDisplayUseTvInterface => 'ಆಂಡ್ರಾಯ್ಡ್ ಟಿವಿ ಇಂಟರ್ಫೇಸ್'; @override - String get settingsLanguageSectionTitle => 'Language & Formats'; + String get settingsLanguageSectionTitle => 'ಭಾಷೆ ಮತ್ತು ಸ್ವರೂಪಗಳು'; @override - String get settingsLanguageTile => 'Language'; + String get settingsLanguageTile => 'ಭಾಷೆ'; @override - String get settingsLanguagePageTitle => 'Language'; + String get settingsLanguagePageTitle => 'ಭಾಷೆ'; @override - String get settingsCoordinateFormatTile => 'Coordinate format'; + String get settingsCoordinateFormatTile => 'ನಿರ್ದೇಶಾಂಕ ಸ್ವರೂಪ'; @override - String get settingsCoordinateFormatDialogTitle => 'Coordinate Format'; + String get settingsCoordinateFormatDialogTitle => 'ನಿರ್ದೇಶಾಂಕ ಸ್ವರೂಪ'; @override - String get settingsUnitSystemTile => 'Units'; + String get settingsUnitSystemTile => 'ಏಕಮಾನಗಳು'; @override - String get settingsUnitSystemDialogTitle => 'Units'; + String get settingsUnitSystemDialogTitle => 'ಏಕಮಾನಗಳು'; @override - String get settingsForceWesternArabicNumeralsTile => 'Force Arabic numerals'; + String get settingsForceWesternArabicNumeralsTile => 'ಅರೇಬಿಕ್ ಅಂಕಿಗಳನ್ನು ಒತ್ತಾಯಿಸಿ'; @override - String get settingsScreenSaverPageTitle => 'Screen Saver'; + String get settingsScreenSaverPageTitle => 'ಪರದೆ ರಕ್ಷಕ'; @override - String get settingsWidgetPageTitle => 'Photo Frame'; + String get settingsWidgetPageTitle => 'ಚಿತ್ರ ಚೌಕಟ್ಟು'; @override - String get settingsWidgetShowOutline => 'Outline'; + String get settingsWidgetShowOutline => 'ರೂಪರೇಖೆ'; @override - String get settingsWidgetOpenPage => 'When tapping on the widget'; + String get settingsWidgetOpenPage => 'ವಿಜೆಟ್ ಮೇಲೆ ಸ್ಪರ್ಶಿಸುವಾಗ'; @override - String get settingsWidgetDisplayedItem => 'Displayed item'; + String get settingsWidgetDisplayedItem => 'ಪ್ರದರ್ಶಿಸಲಾದ ವಸ್ತು'; @override - String get settingsCollectionTile => 'Collection'; + String get settingsCollectionTile => 'ಸಂಗ್ರಹ'; @override - String get statsPageTitle => 'Stats'; + String get statsPageTitle => 'ಅಂಕಿಅಂಶಗಳು'; @override String statsWithGps(int count) { @@ -2173,198 +2173,198 @@ class AppLocalizationsKn extends AppLocalizations { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: '$countString items with location', - one: '1 item with location', + other: 'ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು $countString ವಸ್ತುಗಳು ಹೊಂದಿವೆ', + one: 'ಸ್ಥಳ ಮಾಹಿತಿಯನ್ನು 1 ವಸ್ತು ಹೊಂದಿದೆ ', ); return '$_temp0'; } @override - String get statsTopCountriesSectionTitle => 'Top Countries'; + String get statsTopCountriesSectionTitle => 'ಅಗ್ರ ದೇಶಗಳು'; @override - String get statsTopStatesSectionTitle => 'Top States'; + String get statsTopStatesSectionTitle => 'ಅಗ್ರ ರಾಜ್ಯಗಳು'; @override - String get statsTopPlacesSectionTitle => 'Top Places'; + String get statsTopPlacesSectionTitle => 'ಅಗ್ರ ಸ್ಥಳಗಳು'; @override - String get statsTopTagsSectionTitle => 'Top Tags'; + String get statsTopTagsSectionTitle => 'ಅಗ್ರ ಟ್ಯಾಗುಗಳು'; @override - String get statsTopAlbumsSectionTitle => 'Top Albums'; + String get statsTopAlbumsSectionTitle => 'ಅಗ್ರ ಆಲ್ಬಮ್ ಗಳು'; @override - String get viewerOpenPanoramaButtonLabel => 'OPEN PANORAMA'; + String get viewerOpenPanoramaButtonLabel => 'ಪನೋರಮಾ ತೆರೆಯಿರಿ'; @override - String get viewerSetWallpaperButtonLabel => 'SET WALLPAPER'; + String get viewerSetWallpaperButtonLabel => 'ಭಿತ್ತಿಚಿತ್ರ ಹೊಂದಿಸಿ'; @override - String get viewerErrorUnknown => 'Oops!'; + String get viewerErrorUnknown => 'ಅಯ್ಯೋ!'; @override - String get viewerErrorDoesNotExist => 'The file no longer exists.'; + String get viewerErrorDoesNotExist => 'ಕಡತವು ಇನ್ಮುಂದೆ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ.'; @override - String get viewerInfoPageTitle => 'Info'; + String get viewerInfoPageTitle => 'ವಿವರ'; @override - String get viewerInfoBackToViewerTooltip => 'Back to viewer'; + String get viewerInfoBackToViewerTooltip => 'ವೀಕ್ಷಕಕ್ಕೆ ಹಿಂದಿರುಗಿ'; @override - String get viewerInfoUnknown => 'unknown'; + String get viewerInfoUnknown => 'ಅಜ್ಞಾತ'; @override - String get viewerInfoLabelDescription => 'Description'; + String get viewerInfoLabelDescription => 'ವಿವರಣೆ'; @override - String get viewerInfoLabelTitle => 'Title'; + String get viewerInfoLabelTitle => 'ಶೀರ್ಷಿಕೆ'; @override - String get viewerInfoLabelDate => 'Date'; + String get viewerInfoLabelDate => 'ದಿನಾಂಕ'; @override - String get viewerInfoLabelResolution => 'Resolution'; + String get viewerInfoLabelResolution => 'ಅಳತೆ'; @override - String get viewerInfoLabelSize => 'Size'; + String get viewerInfoLabelSize => 'ಪ್ರಮಾಣ'; @override - String get viewerInfoLabelUri => 'URI'; + String get viewerInfoLabelUri => 'ಯು ಆರ್ ಐ'; @override - String get viewerInfoLabelPath => 'Path'; + String get viewerInfoLabelPath => 'ಹಾದಿ'; @override - String get viewerInfoLabelDuration => 'Duration'; + String get viewerInfoLabelDuration => 'ಅವಧಿ'; @override - String get viewerInfoLabelOwner => 'Owner'; + String get viewerInfoLabelOwner => 'ಒಡೆಯ'; @override - String get viewerInfoLabelCoordinates => 'Coordinates'; + String get viewerInfoLabelCoordinates => 'ನಿರ್ದೇಶಾಂಕ'; @override - String get viewerInfoLabelAddress => 'Address'; + String get viewerInfoLabelAddress => 'ವಿಳಾಸ'; @override - String get mapStyleDialogTitle => 'Map Style'; + String get mapStyleDialogTitle => 'ನಕ್ಷೆಯ ಪ್ರಕಾರ'; @override - String get mapStyleTooltip => 'Select map style'; + String get mapStyleTooltip => 'ನಕ್ಷೆಯ ಶೈಲಿಯನ್ನು ಆಯ್ಕೆಮಾಡಿ'; @override - String get mapZoomInTooltip => 'Zoom in'; + String get mapZoomInTooltip => 'ಹಿಗ್ಗಿಸು'; @override - String get mapZoomOutTooltip => 'Zoom out'; + String get mapZoomOutTooltip => 'ಕುಗ್ಗಿಸು'; @override - String get mapPointNorthUpTooltip => 'Point north up'; + String get mapPointNorthUpTooltip => 'ಉತ್ತರದಿಕ್ಕನ್ನು ಮೇಲ್ಮುಖವಾಗಿ ಸೂಚಿಸು'; @override - String get mapAttributionOsmData => 'Map data © [OpenStreetMap](https://www.openstreetmap.org/copyright) contributors'; + String get mapAttributionOsmData => 'ನಕ್ಷೆಯ ದತ್ತಾಂಶ © [OpenStreetMap](https://www.openstreetmap.org/copyright) ಕೊಡುಗೆದಾರರು'; @override - String get mapAttributionOsmLiberty => 'Tiles by [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • Hosted by [OSM Americana](https://tile.ourmap.us)'; + String get mapAttributionOsmLiberty => 'ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [OpenMapTiles](https://www.openmaptiles.org/), [CC BY](http://creativecommons.org/licenses/by/4.0) • ಆಶ್ರಯದಾತರು [OSM Americana](https://tile.ourmap.us)'; @override - String get mapAttributionOpenTopoMap => '[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | Tiles by [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)'; + String get mapAttributionOpenTopoMap => '[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)'; @override - String get mapAttributionOsmHot => 'Tiles by [HOT](https://www.hotosm.org/) • Hosted by [OSM France](https://openstreetmap.fr/)'; + String get mapAttributionOsmHot => 'ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [HOT](https://www.hotosm.org/) • ಆಶ್ರಯದಾತರು [OSM France](https://openstreetmap.fr/)'; @override - String get mapAttributionStamen => 'Tiles by [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)'; + String get mapAttributionStamen => 'ಬಿಲ್ಲೆಗಳನ್ನು ಒದಗಿಸಿದವರು [Stamen Design](https://stamen.com), [CC BY 3.0](https://creativecommons.org/licenses/by/3.0)'; @override - String get openMapPageTooltip => 'View on Map page'; + String get openMapPageTooltip => 'ನಕ್ಷೆ ಪುಟದಲ್ಲಿ ವೀಕ್ಷಿಸಿ'; @override - String get mapEmptyRegion => 'No images in this region'; + String get mapEmptyRegion => 'ಈ ಪ್ರದೇಶದಲ್ಲಿ ಯಾವುದೇ ಚಿತ್ರಗಳಿಲ್ಲ'; @override - String get viewerInfoOpenEmbeddedFailureFeedback => 'Failed to extract embedded data'; + String get viewerInfoOpenEmbeddedFailureFeedback => 'ಹುದುಗಿಸಿದ ದತ್ತಾಂಶವನ್ನು ಹೊರತೆಗೆಯಲು ವಿಫಲವಾಗಿದೆ'; @override - String get viewerInfoOpenLinkText => 'Open'; + String get viewerInfoOpenLinkText => 'ತೆರೆಯಿರಿ'; @override - String get viewerInfoViewXmlLinkText => 'View XML'; + String get viewerInfoViewXmlLinkText => 'XML ನೋಡಿ'; @override - String get viewerInfoSearchFieldLabel => 'Search metadata'; + String get viewerInfoSearchFieldLabel => 'ಹುದುಗಿಸಿದ ದತ್ತಾಂಶವನ್ನು ಹುಡುಕಿ'; @override - String get viewerInfoSearchEmpty => 'No matching keys'; + String get viewerInfoSearchEmpty => 'ಹೊಂದಾಣಿಕೆಯ ಕೀಲಿಗಳಿಲ್ಲ'; @override - String get viewerInfoSearchSuggestionDate => 'Date & time'; + String get viewerInfoSearchSuggestionDate => 'ದಿನಾಂಕ ಮತ್ತು ಸಮಯ'; @override - String get viewerInfoSearchSuggestionDescription => 'Description'; + String get viewerInfoSearchSuggestionDescription => 'ವಿವರಣೆ'; @override - String get viewerInfoSearchSuggestionDimensions => 'Dimensions'; + String get viewerInfoSearchSuggestionDimensions => 'ಆಯಾಮ'; @override - String get viewerInfoSearchSuggestionResolution => 'Resolution'; + String get viewerInfoSearchSuggestionResolution => 'ಅಳತೆ'; @override - String get viewerInfoSearchSuggestionRights => 'Rights'; + String get viewerInfoSearchSuggestionRights => 'ಹಕ್ಕುಗಳು'; @override - String get wallpaperUseScrollEffect => 'Use scroll effect on home screen'; + String get wallpaperUseScrollEffect => 'ಮುಖಪುಟದಲ್ಲಿ ಸುರುಳಿ ಪರಿಣಾಮವನ್ನು ಬಳಸಿ'; @override - String get tagEditorPageTitle => 'Edit Tags'; + String get tagEditorPageTitle => 'Tagಗಳನ್ನು ತಿದ್ದಿ'; @override - String get tagEditorPageNewTagFieldLabel => 'New tag'; + String get tagEditorPageNewTagFieldLabel => 'ಹೊಸ ಟ್ಯಾಗು'; @override - String get tagEditorPageAddTagTooltip => 'Add tag'; + String get tagEditorPageAddTagTooltip => 'ಟ್ಯಾಗು ಸೇರಿಸಿ'; @override - String get tagEditorSectionRecent => 'Recent'; + String get tagEditorSectionRecent => 'ಇತ್ತೀಚಿನವು'; @override - String get tagEditorSectionPlaceholders => 'Placeholders'; + String get tagEditorSectionPlaceholders => 'ಪ್ಲೇಸ್‌ಹೋಲ್ಡರ್‌ಗಳು'; @override - String get tagEditorDiscardDialogMessage => 'Do you want to discard changes?'; + String get tagEditorDiscardDialogMessage => 'ನೀವು ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸಲು ಬಯಸುವಿರಾ?'; @override - String get tagPlaceholderCountry => 'Country'; + String get tagPlaceholderCountry => 'ದೇಶ'; @override - String get tagPlaceholderState => 'State'; + String get tagPlaceholderState => 'ರಾಜ್ಯ'; @override - String get tagPlaceholderPlace => 'Place'; + String get tagPlaceholderPlace => 'ಸ್ಥಳ'; @override - String get panoramaEnableSensorControl => 'Enable sensor control'; + String get panoramaEnableSensorControl => 'ಸಂವೇದಕ ನಿಯಂತ್ರಣವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ'; @override - String get panoramaDisableSensorControl => 'Disable sensor control'; + String get panoramaDisableSensorControl => 'ಸಂವೇದಕ ನಿಯಂತ್ರಣವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ'; @override - String get sourceViewerPageTitle => 'Source'; + String get sourceViewerPageTitle => 'ಮೂಲ'; @override - String get filePickerShowHiddenFiles => 'Show hidden files'; + String get filePickerShowHiddenFiles => 'ಮರೆಮಾಡಿದ ಕಡತಗಳನ್ನು ತೋರಿಸಿ'; @override - String get filePickerDoNotShowHiddenFiles => 'Don’t show hidden files'; + String get filePickerDoNotShowHiddenFiles => 'ಮರೆಮಾಡಿದ ಕಡತಗಳನ್ನು ತೋರಿಸಬೇಡಿ'; @override - String get filePickerOpenFrom => 'Open from'; + String get filePickerOpenFrom => 'ಇಂದ ತೆರೆಯಿರಿ'; @override - String get filePickerNoItems => 'No items'; + String get filePickerNoItems => 'ವಸ್ತುಗಳಿಲ್ಲ'; @override - String get filePickerUseThisFolder => 'Use this folder'; + String get filePickerUseThisFolder => 'ಈ ಕೋಶವನ್ನು ಬಳಸಿ'; } diff --git a/lib/l10ngen/app_localizations_zh.dart b/lib/l10ngen/app_localizations_zh.dart index be15a5e3c..e7b520b84 100644 --- a/lib/l10ngen/app_localizations_zh.dart +++ b/lib/l10ngen/app_localizations_zh.dart @@ -4548,7 +4548,7 @@ class AppLocalizationsZhHant extends AppLocalizationsZh { String get mapAttributionOsmLiberty => '地圖由 [OpenMapTiles](https://www.openmaptiles.org/) 所提供,以 [CC BY](http://creativecommons.org/licenses/by/4.0) 授權 • 托管於 [OSM Americana](https://tile.ourmap.us)'; @override - String get mapAttributionOpenTopoMap => '[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | 地圖由 [OpenTopoMap](https://opentopomap.org/),以 [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/) 授權'; + String get mapAttributionOpenTopoMap => '[SRTM](https://www.earthdata.nasa.gov/sensors/srtm) | 地圖由 [OpenTopoMap](https://opentopomap.org/), [CC BY-SA](https://creativecommons.org/licenses/by-sa/3.0/)'; @override String get mapAttributionOsmHot => '繪製於 [HOT](https://www.hotosm.org/) • 主辦方 [OSM France](https://openstreetmap.fr/)'; diff --git a/lib/model/app/contributors.dart b/lib/model/app/contributors.dart index 53ee62d2c..57fe3d009 100644 --- a/lib/model/app/contributors.dart +++ b/lib/model/app/contributors.dart @@ -130,6 +130,8 @@ class Contributors { Contributor('pitroig', 'ona@riseup.net'), Contributor('Rubén Castiñeiras Lorenzo', 'rcasl@outlook.com'), Contributor('hanyang cheng', 'cinxiafortis@tutanota.de'), + Contributor('Chethan', 'chethan@users.noreply.hosted.weblate.org'), + Contributor('Prasannakumar T Bhat', 'pbhat99@gmail.com'), // Contributor('Femini', 'nizamismidov4@gmail.com'), // Azerbaijani // Contributor('Alvi Khan', 'aveenalvi@gmail.com'), // Bengali // Contributor('Htet Oo Hlaing', 'htetoh2006@outlook.com'), // Burmese @@ -142,7 +144,6 @@ class Contributors { // Contributor('AJ07', 'ajaykumarmeena676@gmail.com'), // Hindi // Contributor('Sartaj', 'ssaarrttaajj111@gmail.com'), // Hindi // Contributor('Anurag Samota', 'anuragsamotasamota@gmail.com'), // Hindi - // Contributor('Chethan', 'chethan@users.noreply.hosted.weblate.org'), // Kannada // Contributor('GoRaN', 'gorangharib.909@gmail.com'), // Kurdish (Central) // Contributor('Rasti K5', 'rasti.khdhr@gmail.com'), // Kurdish (Central) // Contributor('Raman', 'xysed@tutanota.com'), // Malayalam diff --git a/lib/model/db/db_sqflite_upgrade.dart b/lib/model/db/db_sqflite_upgrade.dart index bf7e8b122..4796ea17d 100644 --- a/lib/model/db/db_sqflite_upgrade.dart +++ b/lib/model/db/db_sqflite_upgrade.dart @@ -496,13 +496,8 @@ class LocalMediaDbUpgrader { static Future _upgradeFrom14(Database db) async { debugPrint('upgrading DB from v14'); - // no schema changes, but v1.12.4 may have corrupted the DB, - // so we clear rebuildable tables - final tables = [dateTakenTable, metadataTable, addressTable, trashTable, videoPlaybackTable]; - await Future.forEach(tables, (table) async { - if (await db.tableExists(table)) { - await db.delete(table, where: '1'); - } - }); + // transitional upgrade previously used to sanitize rebuildable tables + // (dateTakenTable, metadataTable, addressTable, trashTable, videoPlaybackTable) + // for users with a potentially corrupted DB following upgrade to v1.12.4 } } diff --git a/lib/model/entry/cache.dart b/lib/model/entry/cache.dart index dd5ca41c8..ecb32d75b 100644 --- a/lib/model/entry/cache.dart +++ b/lib/model/entry/cache.dart @@ -1,7 +1,7 @@ import 'dart:async'; +import 'package:aves/image_providers/full_image_provider.dart'; import 'package:aves/image_providers/thumbnail_provider.dart'; -import 'package:aves/image_providers/uri_image_provider.dart'; import 'package:flutter/foundation.dart'; class EntryCache { @@ -30,7 +30,7 @@ class EntryCache { int? pageId; // evict fullscreen image - await UriImage( + await FullImage( uri: uri, mimeType: mimeType, pageId: pageId, diff --git a/lib/model/entry/extensions/images.dart b/lib/model/entry/extensions/images.dart index 1ee6f49fa..88d09adf2 100644 --- a/lib/model/entry/extensions/images.dart +++ b/lib/model/entry/extensions/images.dart @@ -1,8 +1,8 @@ import 'dart:math'; +import 'package:aves/image_providers/full_image_provider.dart'; import 'package:aves/image_providers/region_provider.dart'; import 'package:aves/image_providers/thumbnail_provider.dart'; -import 'package:aves/image_providers/uri_image_provider.dart'; import 'package:aves/model/entry/cache.dart'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/utils/math_utils.dart'; @@ -49,7 +49,7 @@ extension ExtraAvesEntryImages on AvesEntry { )); } - UriImage get uriImage => UriImage( + FullImage get fullImage => FullImage( uri: uri, mimeType: mimeType, pageId: pageId, diff --git a/lib/model/media/geotiff.dart b/lib/model/media/geotiff.dart index d549cd29d..ad036aefb 100644 --- a/lib/model/media/geotiff.dart +++ b/lib/model/media/geotiff.dart @@ -157,7 +157,7 @@ class MappedGeoTiff with MapOverlay { String get id => entry.uri; @override - ImageProvider get imageProvider => entry.uriImage; + ImageProvider get imageProvider => entry.fullImage; @override bool get canOverlay => center != null; diff --git a/lib/services/media/media_fetch_service.dart b/lib/services/media/media_fetch_service.dart index 3e84f8d16..438e2d07c 100644 --- a/lib/services/media/media_fetch_service.dart +++ b/lib/services/media/media_fetch_service.dart @@ -9,6 +9,7 @@ import 'package:aves/services/common/output_buffer.dart'; import 'package:aves/services/common/service_policy.dart'; import 'package:aves/services/common/services.dart'; import 'package:aves/services/media/byte_receiving_codec.dart'; +import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/services.dart'; import 'package:streams_channel/streams_channel.dart'; @@ -55,7 +56,9 @@ abstract class MediaFetchService { int? priority, }); - Future clearSizedThumbnailDiskCache(); + Future clearImageDiskCache(); + + Future clearImageMemoryCache(); bool cancelRegion(Object taskKey); @@ -255,9 +258,18 @@ class PlatformMediaFetchService implements MediaFetchService { } @override - Future clearSizedThumbnailDiskCache() async { + Future clearImageDiskCache() async { try { - return _platformObject.invokeMethod('clearSizedThumbnailDiskCache'); + return _platformObject.invokeMethod('clearImageDiskCache'); + } on PlatformException catch (e, stack) { + await reportService.recordError(e, stack); + } + } + + @override + Future clearImageMemoryCache() async { + try { + return _platformObject.invokeMethod('clearImageMemoryCache'); } on PlatformException catch (e, stack) { await reportService.recordError(e, stack); } @@ -317,7 +329,7 @@ class PlatformMediaFetchService implements MediaFetchService { } @immutable -class ImageRequest { +class ImageRequest extends Equatable { final String uri; final String mimeType; final int? rotationDegrees; @@ -327,14 +339,17 @@ class ImageRequest { final int? sizeBytes; final BytesReceivedCallback? onBytesReceived; + @override + List get props => [uri, mimeType, rotationDegrees, isFlipped, isAnimated, pageId, sizeBytes, onBytesReceived]; + const ImageRequest( - this.uri, - this.mimeType, { - required this.rotationDegrees, - required this.isFlipped, - required this.isAnimated, - required this.pageId, - required this.sizeBytes, - this.onBytesReceived, - }); + this.uri, + this.mimeType, { + required this.rotationDegrees, + required this.isFlipped, + required this.isAnimated, + required this.pageId, + required this.sizeBytes, + this.onBytesReceived, + }); } diff --git a/lib/widgets/about/data_usage.dart b/lib/widgets/about/data_usage.dart index 9ab3dd2b7..67d5d52c9 100644 --- a/lib/widgets/about/data_usage.dart +++ b/lib/widgets/about/data_usage.dart @@ -88,7 +88,7 @@ class _AboutDataUsageState extends State with FeedbackMixin { onPressed: () async { await storageService.deleteTempDirectory(); await storageService.deleteExternalCache(); - await mediaFetchService.clearSizedThumbnailDiskCache(); + await mediaFetchService.clearImageDiskCache(); imageCache.clear(); _reload(); setState(() {}); diff --git a/lib/widgets/aves_app.dart b/lib/widgets/aves_app.dart index c5e14a22b..f9e2e0a8e 100644 --- a/lib/widgets/aves_app.dart +++ b/lib/widgets/aves_app.dart @@ -70,7 +70,6 @@ class AvesApp extends StatefulWidget { 'fi', // Finnish 'he', // Hebrew 'hi', // Hindi - 'kn', // Kannada 'ml', // Malayalam 'my', // Burmese 'or', // Odia diff --git a/lib/widgets/common/identity/aves_app_bar.dart b/lib/widgets/common/identity/aves_app_bar.dart index 6e5746836..c9cae1f55 100644 --- a/lib/widgets/common/identity/aves_app_bar.dart +++ b/lib/widgets/common/identity/aves_app_bar.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:math'; import 'package:aves/model/settings/settings.dart'; @@ -220,6 +221,7 @@ class AvesFloatingBar extends StatefulWidget { class _AvesFloatingBarState extends State with RouteAware { // prevent expensive blurring when the current page is hidden final ValueNotifier _isBlurAllowedNotifier = ValueNotifier(true); + Timer? _blurBlockTimer; @override void didChangeDependencies() { @@ -240,6 +242,8 @@ class _AvesFloatingBarState extends State with RouteAware { @override void didPopNext() { // post to prevent single frame flash during hero + _blurBlockTimer?.cancel(); + _blurBlockTimer = null; WidgetsBinding.instance.addPostFrameCallback((_) { if (mounted) { _isBlurAllowedNotifier.value = true; @@ -249,8 +253,9 @@ class _AvesFloatingBarState extends State with RouteAware { @override void didPushNext() { - // post to prevent single frame flash during hero - WidgetsBinding.instance.addPostFrameCallback((_) { + // delay blur disabling, otherwise visual artifacts appear during page transition with Impeller + _blurBlockTimer?.cancel(); + _blurBlockTimer = Timer(ADurations.pageTransitionLoose, () { if (mounted) { _isBlurAllowedNotifier.value = false; } diff --git a/lib/widgets/debug/cache.dart b/lib/widgets/debug/cache.dart index 38eaf8e60..419e3c0c7 100644 --- a/lib/widgets/debug/cache.dart +++ b/lib/widgets/debug/cache.dart @@ -12,6 +12,20 @@ class DebugCacheSection extends StatefulWidget { } class _DebugCacheSectionState extends State with AutomaticKeepAliveClientMixin { + final TextEditingController _imageCacheSizeTextController = TextEditingController(); + + @override + void initState() { + super.initState(); + _imageCacheSizeTextController.text = '${imageCache.maximumSizeBytes}'; + } + + @override + void dispose() { + _imageCacheSizeTextController.dispose(); + super.dispose(); + } + @override Widget build(BuildContext context) { super.build(context); @@ -41,6 +55,31 @@ class _DebugCacheSectionState extends State with AutomaticKee ), ], ), + Row( + children: [ + Expanded( + child: TextField( + controller: _imageCacheSizeTextController, + decoration: const InputDecoration(labelText: 'imageCache size bytes'), + keyboardType: TextInputType.number, + ), + ), + const SizedBox(width: 8), + ElevatedButton( + onPressed: () { + final size = int.tryParse(_imageCacheSizeTextController.text); + if (size != null) { + imageCache.maximumSizeBytes = size; + } else { + _imageCacheSizeTextController.text = '${imageCache.maximumSizeBytes}'; + } + setState(() {}); + }, + child: const Text('Apply'), + ), + ], + ), + const Divider(), Row( children: [ const Expanded( @@ -48,7 +87,19 @@ class _DebugCacheSectionState extends State with AutomaticKee ), const SizedBox(width: 8), ElevatedButton( - onPressed: mediaFetchService.clearSizedThumbnailDiskCache, + onPressed: mediaFetchService.clearImageDiskCache, + child: const Text('Clear'), + ), + ], + ), + Row( + children: [ + const Expanded( + child: Text('Glide memory cache: ?'), + ), + const SizedBox(width: 8), + ElevatedButton( + onPressed: mediaFetchService.clearImageMemoryCache, child: const Text('Clear'), ), ], diff --git a/lib/widgets/settings/language/locales.dart b/lib/widgets/settings/language/locales.dart index 019531f57..588b5da93 100644 --- a/lib/widgets/settings/language/locales.dart +++ b/lib/widgets/settings/language/locales.dart @@ -24,6 +24,7 @@ class SupportedLocales { 'is': 'Íslenska', 'it': 'Italiano', 'ja': '日本語', + 'kn': 'ಕನ್ನಡ', 'ko': '한국어', 'lt': 'Lietuvių', 'nb': 'Norsk (Bokmål)', diff --git a/lib/widgets/viewer/action/printer.dart b/lib/widgets/viewer/action/printer.dart index 87178cb0a..b53777854 100644 --- a/lib/widgets/viewer/action/printer.dart +++ b/lib/widgets/viewer/action/printer.dart @@ -118,7 +118,7 @@ class EntryPrinter with FeedbackMixin { } } else { return pdf.Image( - await flutterImageProvider(entry.uriImage), + await flutterImageProvider(entry.fullImage), fit: _fit, ); } diff --git a/lib/widgets/viewer/overlay/wallpaper_buttons.dart b/lib/widgets/viewer/overlay/wallpaper_buttons.dart index 3964b9d31..7575c1235 100644 --- a/lib/widgets/viewer/overlay/wallpaper_buttons.dart +++ b/lib/widgets/viewer/overlay/wallpaper_buttons.dart @@ -172,7 +172,7 @@ class WallpaperButtons extends StatelessWidget with FeedbackMixin { } else { // provider image is already rotated, but not cropped needCrop = true; - provider = entry.uriImage; + provider = entry.fullImage; } } if (provider == null) return null; diff --git a/lib/widgets/viewer/panorama_page.dart b/lib/widgets/viewer/panorama_page.dart index 2a1da0ae4..3cab04229 100644 --- a/lib/widgets/viewer/panorama_page.dart +++ b/lib/widgets/viewer/panorama_page.dart @@ -90,7 +90,7 @@ class _PanoramaPageState extends State { } }, child: Image( - image: entry.uriImage, + image: entry.fullImage, ), ), Positioned( diff --git a/lib/widgets/viewer/video/conductor.dart b/lib/widgets/viewer/video/conductor.dart index cf409183d..519e3eceb 100644 --- a/lib/widgets/viewer/video/conductor.dart +++ b/lib/widgets/viewer/video/conductor.dart @@ -1,4 +1,5 @@ import 'dart:async'; +import 'dart:math'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/entry/extensions/props.dart'; @@ -15,7 +16,7 @@ import 'package:leak_tracker/leak_tracker.dart'; class VideoConductor { final CollectionLens? _collection; final List _controllers = []; - final List _subscriptions = []; + final Map _subscriptions = {}; final PlaybackStateHandler _playbackStateHandler = DatabasePlaybackStateHandler(); final ValueNotifier playingVideoControllerNotifier = ValueNotifier(null); @@ -36,9 +37,6 @@ class VideoConductor { if (kFlutterMemoryAllocationsEnabled) { LeakTracking.dispatchObjectDisposed(object: this); } - _subscriptions - ..forEach((sub) => sub.cancel()) - ..clear(); await _disposeAll(); playingVideoControllerNotifier.dispose(); _controllers.clear(); @@ -47,22 +45,24 @@ class VideoConductor { } } - AvesVideoController getOrCreateController(AvesEntry entry, {int? maxControllerCount}) { + Future getOrCreateController(AvesEntry entry, {int? maxControllerCount}) async { var controller = getController(entry); if (controller != null) { _controllers.remove(controller); } else { + maxControllerCount = max(_defaultMaxControllerCount, maxControllerCount ?? 0); + while (_controllers.length >= maxControllerCount) { + await _disposeController(_controllers.removeLast()); + } + await deviceService.requestGarbageCollection(); controller = videoControllerFactory.buildController( entry, playbackStateHandler: _playbackStateHandler, settings: settings, ); - _subscriptions.add(controller.statusStream.listen((event) => _onControllerStatusChanged(entry, controller!, event))); + _subscriptions[controller] = controller.statusStream.listen((event) => _onControllerStatusChanged(entry, controller!, event)); } _controllers.insert(0, controller); - while (_controllers.length > (maxControllerCount ?? _defaultMaxControllerCount)) { - _controllers.removeLast().dispose(); - } return controller; } @@ -99,9 +99,14 @@ class VideoConductor { Future _applyToAll(FutureOr Function(AvesVideoController controller) action) => Future.forEach(_controllers, action); - Future _disposeAll() => _applyToAll((controller) => controller.dispose()); + Future _disposeAll() => _applyToAll(_disposeController); Future pauseAll() => _applyToAll((controller) => controller.pause()); Future muteAll(bool muted) => _applyToAll((controller) => controller.mute(muted)); + + Future _disposeController(AvesVideoController controller) async { + await _subscriptions.remove(controller)?.cancel(); + await controller.dispose(); + } } diff --git a/lib/widgets/viewer/visual/controller_mixin.dart b/lib/widgets/viewer/visual/controller_mixin.dart index c521144da..f96ed8f05 100644 --- a/lib/widgets/viewer/visual/controller_mixin.dart +++ b/lib/widgets/viewer/visual/controller_mixin.dart @@ -130,7 +130,7 @@ mixin EntryViewControllerMixin on State { } Future _initVideoController(AvesEntry entry) async { - final controller = context.read().getOrCreateController(entry); + final controller = await context.read().getOrCreateController(entry); setState(() {}); if (videoAutoPlayEnabled || entry.isAnimated) { @@ -157,7 +157,9 @@ mixin EntryViewControllerMixin on State { if (videoPageEntries.isNotEmpty) { // init video controllers for all pages that could need it final videoConductor = context.read(); - videoPageEntries.forEach((entry) => videoConductor.getOrCreateController(entry, maxControllerCount: videoPageEntries.length)); + await Future.forEach(videoPageEntries, (entry) async { + await videoConductor.getOrCreateController(entry, maxControllerCount: videoPageEntries.length); + }); // auto play/pause when changing page Future _onPageChanged() async { diff --git a/lib/widgets/viewer/visual/raster.dart b/lib/widgets/viewer/visual/raster.dart index 734aefb6a..3352e498d 100644 --- a/lib/widgets/viewer/visual/raster.dart +++ b/lib/widgets/viewer/visual/raster.dart @@ -43,6 +43,8 @@ class _RasterImageViewState extends State { final ValueNotifier _fullImageLoaded = ValueNotifier(false); ImageInfo? _fullImageInfo; + static const double _tilesByShortestSide = 2; + AvesEntry get entry => widget.entry; ValueNotifier get viewStateNotifier => widget.viewStateNotifier; @@ -61,7 +63,7 @@ class _RasterImageViewState extends State { region: fullImageRegion, ); } else { - return entry.uriImage; + return entry.fullImage; } } @@ -158,7 +160,7 @@ class _RasterImageViewState extends State { void _initTiling(Size viewportSize) { final devicePixelRatio = MediaQuery.of(context).devicePixelRatio; - _tileSide = viewportSize.shortestSide * devicePixelRatio; + _tileSide = viewportSize.shortestSide * devicePixelRatio / _tilesByShortestSide; // scale for initial state `contained` final containedScale = min(viewportSize.width / _displaySize.width, viewportSize.height / _displaySize.height); _maxSampleSize = ExtraAvesEntryImages.sampleSizeForScale(magnifierScale: containedScale, devicePixelRatio: devicePixelRatio); diff --git a/lib/widgets/viewer/visual/video/cover.dart b/lib/widgets/viewer/visual/video/cover.dart index ae7da3a51..e7df3d585 100644 --- a/lib/widgets/viewer/visual/video/cover.dart +++ b/lib/widgets/viewer/visual/video/cover.dart @@ -58,7 +58,7 @@ class _VideoCoverState extends State { Size get videoDisplaySize => widget.videoDisplaySize; // use the high res photo as cover for the video part of a motion photo - ImageProvider get videoCoverUriImage => (mainEntry.isMotionPhoto ? mainEntry : entry).uriImage; + ImageProvider get videoCoverUriImage => (mainEntry.isMotionPhoto ? mainEntry : entry).fullImage; @override void initState() { diff --git a/pubspec.lock b/pubspec.lock index 60fa935d0..01faf1d84 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -13,10 +13,10 @@ packages: dependency: transitive description: name: _flutterfire_internals - sha256: "7fd72d77a7487c26faab1d274af23fb008763ddc10800261abbfb2c067f183d5" + sha256: de9ecbb3ddafd446095f7e833c853aff2fa1682b017921fe63a833f9d6f0e422 url: "https://pub.dev" source: hosted - version: "1.3.53" + version: "1.3.54" analyzer: dependency: transitive description: @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: archive - sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742" + sha256: "7dcbd0f87fe5f61cb28da39a1a8b70dbc106e2fe0516f7836eb7bb2948481a12" url: "https://pub.dev" source: hosted - version: "4.0.4" + version: "4.0.5" args: dependency: transitive description: @@ -296,10 +296,10 @@ packages: dependency: transitive description: name: firebase_core - sha256: f4d8f49574a4e396f34567f3eec4d38ab9c3910818dec22ca42b2a467c685d8b + sha256: "017d17d9915670e6117497e640b2859e0b868026ea36bf3a57feb28c3b97debe" url: "https://pub.dev" source: hosted - version: "3.12.1" + version: "3.13.0" firebase_core_platform_interface: dependency: transitive description: @@ -312,26 +312,26 @@ packages: dependency: transitive description: name: firebase_core_web - sha256: faa5a76f6380a9b90b53bc3bdcb85bc7926a382e0709b9b5edac9f7746651493 + sha256: "129a34d1e0fb62e2b488d988a1fc26cc15636357e50944ffee2862efe8929b23" url: "https://pub.dev" source: hosted - version: "2.21.1" + version: "2.22.0" firebase_crashlytics: dependency: transitive description: name: firebase_crashlytics - sha256: d672dad83e6e99b826599fef63dbe71bac70633d5c3df90c124e986e1461e79b + sha256: f3fa4a17c2f061b16b2e3ac7aaed889ae954b8952d0fd3e0009a9870cde7bbd2 url: "https://pub.dev" source: hosted - version: "4.3.4" + version: "4.3.5" firebase_crashlytics_platform_interface: dependency: transitive description: name: firebase_crashlytics_platform_interface - sha256: b2468a5cd54051dd31ca332a5c35f1bcbfb21b0135f84d4606c3275a226c0321 + sha256: cedfbe39927711c0e56fc38bfecbd89e17816b21698a3d88d63298c530ed375c url: "https://pub.dev" source: hosted - version: "3.8.4" + version: "3.8.5" fixnum: dependency: transitive description: @@ -352,10 +352,10 @@ packages: dependency: transitive description: name: flex_seed_scheme - sha256: d3ba3c5c92d2d79d45e94b4c6c71d01fac3c15017da1545880c53864da5dfeb0 + sha256: b06d8b367b84cbf7ca5c5603c858fa5edae88486c4e4da79ac1044d73b6c62ec url: "https://pub.dev" source: hosted - version: "3.5.0" + version: "3.5.1" floating: dependency: "direct main" description: @@ -440,10 +440,10 @@ packages: dependency: "direct main" description: name: flutter_markdown - sha256: e7bbc718adc9476aa14cfddc1ef048d2e21e4e8f18311aaac723266db9f9e7b5 + sha256: "634622a3a826d67cb05c0e3e576d1812c430fa98404e95b60b131775c73d76ec" url: "https://pub.dev" source: hosted - version: "0.7.6+2" + version: "0.7.7" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -535,26 +535,26 @@ packages: dependency: transitive description: name: google_maps_flutter - sha256: "621125e35e81ca39ef600e45243d2be93167e61def72bc7207b0c4a635c58506" + sha256: "830d8f7b51b4a950bf0d7daa675324fed6c9beb57a7ecca2a59018270c96b4e0" url: "https://pub.dev" source: hosted - version: "2.10.1" + version: "2.12.1" google_maps_flutter_android: dependency: transitive description: name: google_maps_flutter_android - sha256: "3b3f55d6b4f2bde6bbe80dca0bf8d228313005c9ce8a97a1d24257600d8c92e5" + sha256: "0ede4ae8326335c0c007c8c7a8c9737449263123385e2bdf49f3e71103b2dc2e" url: "https://pub.dev" source: hosted - version: "2.14.14" + version: "2.16.0" google_maps_flutter_ios: dependency: transitive description: name: google_maps_flutter_ios - sha256: "6f798adb0aa1db5adf551f2e39e24bd06c8c0fbe4de912fb2d9b5b3f48147b02" + sha256: ef72c822930ce69515cb91c10cd88cfb8b26296f765808a43cbc9a10eaffacfe url: "https://pub.dev" source: hosted - version: "2.13.2" + version: "2.15.0" google_maps_flutter_platform_interface: dependency: transitive description: @@ -567,10 +567,10 @@ packages: dependency: transitive description: name: google_maps_flutter_web - sha256: bbeb93807a34bfeebdb7ace506bd2bc400a3915dc96736254fea721eb264caa0 + sha256: a45786ea6691cc7cdbe2cf3ce2c2daf4f82a885745666b4a36baada3a4e12897 url: "https://pub.dev" source: hosted - version: "0.5.11" + version: "0.5.12" gpx: dependency: "direct main" description: @@ -623,10 +623,10 @@ packages: dependency: transitive description: name: image - sha256: "13d3349ace88f12f4a0d175eb5c12dcdd39d35c4c109a8a13dfeb6d0bd9e31c3" + sha256: "4e973fcf4caae1a4be2fa0a13157aa38a8f9cb049db6529aa00b4d71abc4d928" url: "https://pub.dev" source: hosted - version: "4.5.3" + version: "4.5.4" intl: dependency: "direct main" description: @@ -788,31 +788,29 @@ packages: source: hosted version: "7.0.7296" media_kit: - dependency: "direct overridden" + dependency: transitive description: - path: media_kit - ref: d2145a50f68394096845915a28874341fbf5b3fe - resolved-ref: d2145a50f68394096845915a28874341fbf5b3fe - url: "https://github.com/media-kit/media-kit.git" - source: git - version: "1.1.11" + name: media_kit + sha256: "48c10c3785df5d88f0eef970743f8c99b2e5da2b34b9d8f9876e598f62d9e776" + url: "https://pub.dev" + source: hosted + version: "1.2.0" media_kit_libs_android_video: dependency: transitive description: name: media_kit_libs_android_video - sha256: "9dd8012572e4aff47516e55f2597998f0a378e3d588d0fad0ca1f11a53ae090c" + sha256: adff9b571b8ead0867f9f91070f8df39562078c0eb3371d88b9029a2d547d7b7 url: "https://pub.dev" source: hosted - version: "1.3.6" + version: "1.3.7" media_kit_video: - dependency: "direct overridden" + dependency: transitive description: - path: media_kit_video - ref: d2145a50f68394096845915a28874341fbf5b3fe - resolved-ref: d2145a50f68394096845915a28874341fbf5b3fe - url: "https://github.com/media-kit/media-kit.git" - source: git - version: "1.2.5" + name: media_kit_video + sha256: a656a9463298c1adc64c57f2d012874f7f2900f0c614d9545a3e7b8bb9e2137b + url: "https://pub.dev" + source: hosted + version: "1.3.0" meta: dependency: transitive description: @@ -1171,10 +1169,10 @@ packages: dependency: "direct main" description: name: provider - sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + sha256: "489024f942069c2920c844ee18bb3d467c69e48955a4f32d1677f71be103e310" url: "https://pub.dev" source: hosted - version: "6.1.2" + version: "6.1.4" pub_semver: dependency: transitive description: @@ -1267,10 +1265,10 @@ packages: dependency: "direct main" description: name: shared_preferences - sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a" + sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5" url: "https://pub.dev" source: hosted - version: "2.5.2" + version: "2.5.3" shared_preferences_android: dependency: transitive description: @@ -1577,10 +1575,10 @@ packages: dependency: transitive description: name: url_launcher_ios - sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626" + sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb" url: "https://pub.dev" source: hosted - version: "6.3.2" + version: "6.3.3" url_launcher_linux: dependency: transitive description: @@ -1673,18 +1671,18 @@ packages: dependency: "direct main" description: name: volume_controller - sha256: "30863a51338db47fe16f92902b1a6c4ee5e15c9287b46573d7c2eb6be1f197d2" + sha256: e82fd689bb8e1fe8e64be3fa5946ff8699058f8cf9f4c1679acdba20cda7f5bd url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.3.3" wakelock_plus: dependency: transitive description: name: wakelock_plus - sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e" + sha256: b90fbcc8d7bdf3b883ea9706d9d76b9978cb1dfa4351fcc8014d6ec31a493354 url: "https://pub.dev" source: hosted - version: "1.2.10" + version: "1.2.11" wakelock_plus_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 28024ff74..a5f870332 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -7,7 +7,7 @@ repository: https://github.com/deckerst/aves # - play changelog: /whatsnew/whatsnew-en-US # - izzy changelog: /fastlane/metadata/android/en-US/changelogs/XXX01.txt # - libre changelog: /fastlane/metadata/android/en-US/changelogs/XXX.txt -version: 1.12.8+148 +version: 1.12.9+149 publish_to: none environment: @@ -130,18 +130,6 @@ dependencies: volume_controller: xml: -dependency_overrides: - media_kit: - git: - url: https://github.com/media-kit/media-kit.git - ref: d2145a50f68394096845915a28874341fbf5b3fe - path: media_kit - media_kit_video: - git: - url: https://github.com/media-kit/media-kit.git - ref: d2145a50f68394096845915a28874341fbf5b3fe - path: media_kit_video - dev_dependencies: flutter_test: sdk: flutter @@ -171,9 +159,6 @@ flutter: ################################################################################ # Test driver -# capture shaders (profile mode, real device only): -# % ./flutterw drive --flavor play -t test_driver/driver_shaders.dart --profile --cache-sksl --write-sksl-on-exit shaders.sksl.json - # generate screenshots (profile mode, specific collection): # % ./flutterw drive --flavor play -t test_driver/driver_screenshots.dart --profile diff --git a/shaders.sksl.json b/shaders.sksl.json deleted file mode 100644 index e732b7233..000000000 --- a/shaders.sksl.json +++ /dev/null @@ -1 +0,0 @@ -{"platform":"android","name":"XQ DE72","engineRevision":"18b71d647a292a980abb405ac7d16fe1f0b20434","data":{"AYQA5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAAAAMYAAAAAAAQAAAABAMQAAAAA":"DAAAAExTS1MlAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0NCB1bG9jYWxNYXRyaXhfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBmbG9hdDQgaW5DaXJjbGVFZGdlOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCgl2aW5DaXJjbGVFZGdlX1MwID0gaW5DaXJjbGVFZGdlOwoJdmluQ29sb3JfUzAgPSBpbkNvbG9yOwoJZmxvYXQyIF90bXBfMF9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IHVsb2NhbE1hdHJpeF9TMC54eiAqIGluUG9zaXRpb24gKyB1bG9jYWxNYXRyaXhfUzAueXc7Cglza19Qb3NpdGlvbiA9IF90bXBfMF9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAAEMCAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDQgY2lyY2xlRWRnZTsKCWNpcmNsZUVkZ2UgPSB2aW5DaXJjbGVFZGdlX1MwOwoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZpbkNvbG9yX1MwOwoJZmxvYXQgZCA9IGxlbmd0aChjaXJjbGVFZGdlLnh5KTsKCWhhbGYgZGlzdGFuY2VUb091dGVyRWRnZSA9IGhhbGYoY2lyY2xlRWRnZS56ICogKDEuMCAtIGQpKTsKCWhhbGYgZWRnZUFscGhhID0gc2F0dXJhdGUoZGlzdGFuY2VUb091dGVyRWRnZSk7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGVkZ2VBbHBoYSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQAAAAA=","B2ABSAAABQAAIAABBYAAB7777777777774ABICAAAAAAAAAAAAAABGABAAAAAEAAAAAIBEABAAAAA":"DAAAAExTS1PDAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGhhbGY0IHVDb2xvcl9TMDsKaW4gZmxvYXQyIGluUG9zaXRpb247CmluIGhhbGYgaW5Db3ZlcmFnZTsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBEZWZhdWx0R2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IGNvbG9yID0gdUNvbG9yX1MwOwoJY29sb3IgPSBjb2xvciAqIGluQ292ZXJhZ2U7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247CglmbG9hdDIgX3RtcF8zX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJc2tfUG9zaXRpb24gPSBfdG1wXzFfaW5Qb3NpdGlvbi54eTAxOwp9CgAAAAAAUQEAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZjb2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIERlZmF1bHRHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAABpblBvc2l0aW9uAAAKAAAAaW5Db3ZlcmFnZQAAAAAAAA==","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAIIBAAAABAAAAALIEAAAAAAAAAAAAAABQAMAAAABAAAAAAABBAMAAAAA":"DAAAAExTS1PIAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfMl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzEpICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAAAAL8CAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzE7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKaGFsZjQgVGV4dHVyZUVmZmVjdF9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MxLCB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMCkucnJycjsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIFRleHR1cmVFZmZlY3RfUzFfYzAoX2lucHV0KTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","GZJAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAABAAAAAABBAMABQAMAAAABAAAAAAABBAMAAA":"DAAAAExTS1N3AQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cgl2bG9jYWxDb29yZF9TMCA9IGxvY2FsQ29vcmQ7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAAAAAApAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZsb2NhbENvb3JkX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQyIHRleENvb3JkOwoJdGV4Q29vcmQgPSB2bG9jYWxDb29yZF9TMDsKCW91dHB1dENvbG9yX1MwID0gKGJsZW5kX21vZHVsYXRlKHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMCwgdGV4Q29vcmQpLCBvdXRwdXRDb2xvcl9TMCkpOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","DAQAAAAAAAAAAAAAAJQAAIGAAEACBYQCAGAEFAIBAAAAAABAAAAAAAAAAAAAAMYAAAAAAAQAAAABAMQAAAAA":"DAAAAExTS1N4AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0MiB1QXRsYXNTaXplSW52X1MwOwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKaW4gdXNob3J0MiBpblRleHR1cmVDb29yZHM7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgQml0bWFwVGV4dAoJaW50IHRleElkeCA9IDA7CglmbG9hdDIgdW5vcm1UZXhDb29yZHMgPSBmbG9hdDIoaW5UZXh0dXJlQ29vcmRzLngsIGluVGV4dHVyZUNvb3Jkcy55KTsKCXZUZXh0dXJlQ29vcmRzX1MwID0gdW5vcm1UZXhDb29yZHMgKiB1QXRsYXNTaXplSW52X1MwOwoJdlRleEluZGV4X1MwID0gZmxvYXQodGV4SWR4KTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cglza19Qb3NpdGlvbiA9IGluUG9zaXRpb24ueHkwMTsKfQoAAAAACwIAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUZXh0dXJlQ29vcmRzX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0IHZUZXhJbmRleF9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEJpdG1hcFRleHQKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWhhbGY0IHRleENvbG9yOwoJewoJCXRleENvbG9yID0gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB2VGV4dHVyZUNvb3Jkc19TMCkucnJycjsKCX0KCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gdGV4Q29sb3I7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADwAAAGluVGV4dHVyZUNvb3JkcwAAAAAA","AYQA5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAACABZQA6AAAEAAAAAAAMADAAAAAIAAAAAAAIIDA":"DAAAAExTS1MlAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0NCB1bG9jYWxNYXRyaXhfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBmbG9hdDQgaW5DaXJjbGVFZGdlOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCgl2aW5DaXJjbGVFZGdlX1MwID0gaW5DaXJjbGVFZGdlOwoJdmluQ29sb3JfUzAgPSBpbkNvbG9yOwoJZmxvYXQyIF90bXBfMF9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IHVsb2NhbE1hdHJpeF9TMC54eiAqIGluUG9zaXRpb24gKyB1bG9jYWxNYXRyaXhfUzAueXc7Cglza19Qb3NpdGlvbiA9IF90bXBfMF9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAQAAAOgDAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMTsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzE7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQ0IHZpbkNpcmNsZUVkZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmluQ29sb3JfUzA7CmhhbGY0IENpcmN1bGFyUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzEueCAtIGxlbmd0aChkeHkpKSk7CglhbHBoYSA9IDEuMCAtIGFscGhhOwoJcmV0dXJuIF9pbnB1dCAqIGFscGhhOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQ0IGNpcmNsZUVkZ2U7CgljaXJjbGVFZGdlID0gdmluQ2lyY2xlRWRnZV9TMDsKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWZsb2F0IGQgPSBsZW5ndGgoY2lyY2xlRWRnZS54eSk7CgloYWxmIGRpc3RhbmNlVG9PdXRlckVkZ2UgPSBoYWxmKGNpcmNsZUVkZ2UueiAqICgxLjAgLSBkKSk7CgloYWxmIGVkZ2VBbHBoYSA9IHNhdHVyYXRlKGRpc3RhbmNlVG9PdXRlckVkZ2UpOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChlZGdlQWxwaGEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQ2lyY3VsYXJSUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQAAAAA=","DAQAAAAAAAAAAAAAAJQAAIGAAEACBYQCAGAEFAIBAAAAAABAAAAAAAAAAAACAB4QA4AAAEAAAAAAAMADAAAAAIAAAAAAAIID":"DAAAAExTS1N4AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0MiB1QXRsYXNTaXplSW52X1MwOwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKaW4gdXNob3J0MiBpblRleHR1cmVDb29yZHM7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgQml0bWFwVGV4dAoJaW50IHRleElkeCA9IDA7CglmbG9hdDIgdW5vcm1UZXhDb29yZHMgPSBmbG9hdDIoaW5UZXh0dXJlQ29vcmRzLngsIGluVGV4dHVyZUNvb3Jkcy55KTsKCXZUZXh0dXJlQ29vcmRzX1MwID0gdW5vcm1UZXhDb29yZHMgKiB1QXRsYXNTaXplSW52X1MwOwoJdlRleEluZGV4X1MwID0gZmxvYXQodGV4SWR4KTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cglza19Qb3NpdGlvbiA9IGluUG9zaXRpb24ueHkwMTsKfQoBAAAAmgMAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQp1bmlmb3JtIGZsb2F0NCB1aW5uZXJSZWN0X1MxOwp1bmlmb3JtIGhhbGYyIHVyYWRpdXNQbHVzSGFsZl9TMTsKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdCB2VGV4SW5kZXhfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmluQ29sb3JfUzA7CmhhbGY0IENpcmN1bGFyUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzEueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEJpdG1hcFRleHQKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWhhbGY0IHRleENvbG9yOwoJewoJCXRleENvbG9yID0gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB2VGV4dHVyZUNvb3Jkc19TMCkucnJycjsKCX0KCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gdGV4Q29sb3I7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBDaXJjdWxhclJSZWN0X1MxKG91dHB1dENvdmVyYWdlX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dF9TMTsKCX0KfQoAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACgAAAGluUG9zaXRpb24AAAcAAABpbkNvbG9yAA8AAABpblRleHR1cmVDb29yZHMAAAAAAA==","EADQAAAAAEAAAAAUAABQAAQPAAABCFYMAAKAUEAAAAAAAAABAAAAAAAAAAAJQAIAAAABAAAAACAJAAIAAAAA":"DAAAAExTS1NtAgAAdW5pZm9ybSBmbG9hdDQgc2tfUlRBZGp1c3Q7CnVuaWZvcm0gZmxvYXQyIHVBdGxhc0RpbWVuc2lvbnNJbnZfUzA7CmluIGZsb2F0MyBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiB1c2hvcnQyIGluVGV4dHVyZUNvb3JkczsKb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKb3V0IGZsb2F0IHZUZXhJbmRleF9TMDsKb3V0IGZsb2F0MiB2SW50VGV4dHVyZUNvb3Jkc19TMDsKb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBEaXN0YW5jZUZpZWxkUGF0aAoJaW50IHRleElkeCA9IDA7CglmbG9hdDIgdW5vcm1UZXhDb29yZHMgPSBmbG9hdDIoaW5UZXh0dXJlQ29vcmRzLngsIGluVGV4dHVyZUNvb3Jkcy55KTsKCXZUZXh0dXJlQ29vcmRzX1MwID0gdW5vcm1UZXhDb29yZHMgKiB1QXRsYXNEaW1lbnNpb25zSW52X1MwOwoJdlRleEluZGV4X1MwID0gZmxvYXQodGV4SWR4KTsKCXZJbnRUZXh0dXJlQ29vcmRzX1MwID0gdW5vcm1UZXhDb29yZHM7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDMgX3RtcF8xX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJc2tfUG9zaXRpb24gPSBpblBvc2l0aW9uLnh5MHo7Cn0KAAAAAAAAAJICAABzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7CmluIGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKaW4gZmxvYXQgdlRleEluZGV4X1MwOwppbiBmbG9hdDIgdkludFRleHR1cmVDb29yZHNfUzA7CmluIGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgRGlzdGFuY2VGaWVsZFBhdGgKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWZsb2F0MiB1diA9IHZUZXh0dXJlQ29vcmRzX1MwOwoJaGFsZjQgdGV4Q29sb3I7Cgl7CgkJdGV4Q29sb3IgPSBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzAsIHV2KS5ycnJyOwoJfQoJaGFsZiBkaXN0YW5jZSA9IDcuOTY4NzUqKHRleENvbG9yLnIgLSAwLjUwMTk2MDc4NDMxKTsKCWhhbGYgYWZ3aWR0aDsKCWFmd2lkdGggPSBhYnMoMC42NSpoYWxmKGRGZHgodkludFRleHR1cmVDb29yZHNfUzAueCkpKTsKCWhhbGYgdmFsID0gc21vb3Roc3RlcCgtYWZ3aWR0aCwgYWZ3aWR0aCwgZGlzdGFuY2UpOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCh2YWwpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAPAAAAaW5UZXh0dXJlQ29vcmRzAAAAAAA=","AYQQ5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAAAAMYAAAAAAAQAAAABAMQAAAAA":"DAAAAExTS1MlAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0NCB1bG9jYWxNYXRyaXhfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBmbG9hdDQgaW5DaXJjbGVFZGdlOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCgl2aW5DaXJjbGVFZGdlX1MwID0gaW5DaXJjbGVFZGdlOwoJdmluQ29sb3JfUzAgPSBpbkNvbG9yOwoJZmxvYXQyIF90bXBfMF9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IHVsb2NhbE1hdHJpeF9TMC54eiAqIGluUG9zaXRpb24gKyB1bG9jYWxNYXRyaXhfUzAueXc7Cglza19Qb3NpdGlvbiA9IF90bXBfMF9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAANQCAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDQgY2lyY2xlRWRnZTsKCWNpcmNsZUVkZ2UgPSB2aW5DaXJjbGVFZGdlX1MwOwoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZpbkNvbG9yX1MwOwoJZmxvYXQgZCA9IGxlbmd0aChjaXJjbGVFZGdlLnh5KTsKCWhhbGYgZGlzdGFuY2VUb091dGVyRWRnZSA9IGhhbGYoY2lyY2xlRWRnZS56ICogKDEuMCAtIGQpKTsKCWhhbGYgZWRnZUFscGhhID0gc2F0dXJhdGUoZGlzdGFuY2VUb091dGVyRWRnZSk7CgloYWxmIGRpc3RhbmNlVG9Jbm5lckVkZ2UgPSBoYWxmKGNpcmNsZUVkZ2UueiAqIChkIC0gY2lyY2xlRWRnZS53KSk7CgloYWxmIGlubmVyQWxwaGEgPSBzYXR1cmF0ZShkaXN0YW5jZVRvSW5uZXJFZGdlKTsKCWVkZ2VBbHBoYSAqPSBpbm5lckFscGhhOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChlZGdlQWxwaGEpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQAAAAA=","GYJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGAAYAGAAAAAQAAAAAAAQQGAAA":"DAAAAExTS1MwAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAADvAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwID0gaGFsZjQoMSk7CglmbG9hdDIgdGV4Q29vcmQ7Cgl0ZXhDb29yZCA9IHZsb2NhbENvb3JkX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSAoYmxlbmRfbW9kdWxhdGUoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCksIGhhbGY0KDEpKSk7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAHBvc2l0aW9uCgAAAGxvY2FsQ29vcmQAAAAAAAA=","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJIBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAGIAAAAAAAIAAAAAQGIAAAAAA":"DAAAAExTS1M7AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgAAAAAAJhwAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpmbG9hdDQgZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzA7CmZsb2F0NCBmcmFnQ29sb3JfUzFfYzA7CmZsb2F0IHVfYWxwaGFfUzFfYzA7CmZsb2F0IHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9ibHVyX1MxX2MwOwpmbG9hdCB1X3JhZGl1c19zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdV9jb2xvcl9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdV9jb21wb3NpdGVfMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jZW50ZXJfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdV9tYXhfcmFkaXVzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3Jlc29sdXRpb25fc2NhbGVfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfbm9pc2Vfc2NhbGVfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdV9ub2lzZV9waGFzZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUxX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlM19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24yX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uM19TMV9jMDsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxOwpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwpmbG9hdDIgRkxUX2ZsdXR0ZXJfbG9jYWxfRmx1dHRlckZyYWdDb29yZF9TMV9jMCgpOwpmbG9hdDJ4MiBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChmbG9hdDIgcmFkKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgYmx1cik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKGZsb2F0MiByZXNvbHV0aW9uLCBpbm91dCBmbG9hdDIgcCwgZmxvYXQyIHh5LCBmbG9hdDIgcm90YXRpb24sIGZsb2F0IGNlbGxfZGlhbWV0ZXIpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKGZsb2F0MiB1dik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfcmluZ19TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGJsdXIpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChpbm91dCBmbG9hdDIgbik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChmbG9hdCB2LCBmbG9hdCBsLCBmbG9hdCBoKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0IHQpOwp2b2lkIEZMVF9tYWluX1MxX2MwKCk7CmZsb2F0MiBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCkgCnsKCXJldHVybiBmbHV0dGVyX0ZyYWdDb29yZF9TMV9jMC54eTsKfQpmbG9hdDJ4MiBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChmbG9hdDIgcmFkKSAKewoJcmV0dXJuIGZsb2F0MngyKHJhZC54LCAtcmFkLnksIHJhZC55LCByYWQueCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgYmx1cikgCnsKCWZsb2F0IGJsdXJfaGFsZiA9IGJsdXIgKiAwLjU7CglmbG9hdCBkID0gZGlzdGFuY2UodXYsIHh5KTsKCXJldHVybiAxLjAgLSBzbW9vdGhzdGVwKDEuMCAtIGJsdXJfaGFsZiwgMS4wICsgYmx1cl9oYWxmLCBkIC8gcmFkaXVzKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChmbG9hdDIgcmVzb2x1dGlvbiwgaW5vdXQgZmxvYXQyIHAsIGZsb2F0MiB4eSwgZmxvYXQyIHJvdGF0aW9uLCBmbG9hdCBjZWxsX2RpYW1ldGVyKSAKewoJZmxvYXQyIHBhcmFtID0gcm90YXRpb247CglwID0gRkxUX2ZsdXR0ZXJfbG9jYWxfcm90YXRlMmRfUzFfYzAocGFyYW0pICogKHh5IC0gcCkgKyB4eTsKCXAgPSBtb2QocCwgZmxvYXQyKGNlbGxfZGlhbWV0ZXIpKSAvIHJlc29sdXRpb247CglmbG9hdCBjZWxsX3V2ID0gKGNlbGxfZGlhbWV0ZXIgLyByZXNvbHV0aW9uLnkpICogMC41OwoJZmxvYXQgciA9IDAuNjUgKiBjZWxsX3V2OwoJZmxvYXQyIHBhcmFtXzEgPSBwOwoJZmxvYXQyIHBhcmFtXzIgPSBmbG9hdDIoY2VsbF91dik7CglmbG9hdCBwYXJhbV8zID0gcjsKCWZsb2F0IHBhcmFtXzQgPSByICogNTAuMDsKCXJldHVybiBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zLCBwYXJhbV80KTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKGZsb2F0MiB1dikgCnsKCWZsb2F0MiB1dl9zY2FsZSA9IHV2ICogZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW0gPSBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbV8xID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fMiA9IHVfY2lyY2xlMV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8zID0gdV9yb3RhdGlvbjFfUzFfYzA7CglmbG9hdCBwYXJhbV80ID0gMC4xNzsKCWZsb2F0IF8zMTkgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbSwgcGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMywgcGFyYW1fNCk7CglmbG9hdCBnMSA9IF8zMTk7CglmbG9hdDIgcGFyYW1fNSA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzYgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV83ID0gdV9jaXJjbGUyX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzggPSB1X3JvdGF0aW9uMl9TMV9jMDsKCWZsb2F0IHBhcmFtXzkgPSAwLjI7CglmbG9hdCBfMzMxID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW1fNSwgcGFyYW1fNiwgcGFyYW1fNywgcGFyYW1fOCwgcGFyYW1fOSk7CglmbG9hdCBnMiA9IF8zMzE7CglmbG9hdDIgcGFyYW1fMTAgPSBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbV8xMSA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzEyID0gdV9jaXJjbGUzX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzEzID0gdV9yb3RhdGlvbjNfUzFfYzA7CglmbG9hdCBwYXJhbV8xNCA9IDAuMjc1OwoJZmxvYXQgXzM0NCA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtXzEwLCBwYXJhbV8xMSwgcGFyYW1fMTIsIHBhcmFtXzEzLCBwYXJhbV8xNCk7CglmbG9hdCBnMyA9IF8zNDQ7CglmbG9hdCB2ID0gKChnMSAqIGcxICsgZzIpIC0gZzMpICogMC41OwoJcmV0dXJuIGNsYW1wKDAuNDUgKyAwLjggKiB2LCAwLjAsIDEuMCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgYmx1cikgCnsKCWZsb2F0MiBwYXJhbSA9IHV2OwoJZmxvYXQyIHBhcmFtXzEgPSB4eTsKCWZsb2F0IHBhcmFtXzIgPSByYWRpdXMgKyB0aGlja25lc3M7CglmbG9hdCBwYXJhbV8zID0gYmx1cjsKCWZsb2F0IGNpcmNsZV9vdXRlciA9IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtLCBwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zKTsKCWZsb2F0MiBwYXJhbV80ID0gdXY7CglmbG9hdDIgcGFyYW1fNSA9IHh5OwoJZmxvYXQgcGFyYW1fNiA9IG1heChyYWRpdXMgLSB0aGlja25lc3MsIDAuMCk7CglmbG9hdCBwYXJhbV83ID0gYmx1cjsKCWZsb2F0IGNpcmNsZV9pbm5lciA9IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzQsIHBhcmFtXzUsIHBhcmFtXzYsIHBhcmFtXzcpOwoJcmV0dXJuIGNsYW1wKGNpcmNsZV9vdXRlciAtIGNpcmNsZV9pbm5lciwgMC4wLCAxLjApOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKGlub3V0IGZsb2F0MiBuKSAKewoJbiA9IGZyYWN0KG4gKiBmbG9hdDIoNS4zOTg3LCA1LjQ0MjEpKTsKCW4gKz0gZmxvYXQyKGRvdChuLnl4LCBuICsgZmxvYXQyKDIxLjUzNTEsIDE0LjMxMzcpKSk7CglmbG9hdCB4eSA9IG4ueCAqIG4ueTsKCXJldHVybiAoZnJhY3QoeHkgKiA5NS40MzA3KSArIGZyYWN0KHh5ICogNzUuMDQ5NjEpKSAtIDEuMDsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAoZmxvYXQgdiwgZmxvYXQgbCwgZmxvYXQgaCkgCnsKCXJldHVybiBzdGVwKGwsIHYpICogKDEuMCAtIHN0ZXAoaCwgdikpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NwYXJrbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdCB0KSAKewoJZmxvYXQyIHBhcmFtID0gdXY7CglmbG9hdCBfMjQyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAocGFyYW0pOwoJZmxvYXQgbiA9IF8yNDI7CglmbG9hdCBwYXJhbV8xID0gbjsKCWZsb2F0IHBhcmFtXzIgPSAwLjA7CglmbG9hdCBwYXJhbV8zID0gMC4wNTsKCWZsb2F0IHMgPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMyk7CglmbG9hdCBwYXJhbV80ID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAwLjM1KSk7CglmbG9hdCBwYXJhbV81ID0gMC4xOwoJZmxvYXQgcGFyYW1fNiA9IDAuMTU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV80LCBwYXJhbV81LCBwYXJhbV82KTsKCWZsb2F0IHBhcmFtXzcgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDAuNykpOwoJZmxvYXQgcGFyYW1fOCA9IDAuMjsKCWZsb2F0IHBhcmFtXzkgPSAwLjI1OwoJcyArPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fNywgcGFyYW1fOCwgcGFyYW1fOSk7CglmbG9hdCBwYXJhbV8xMCA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMS4wNSkpOwoJZmxvYXQgcGFyYW1fMTEgPSAwLjM7CglmbG9hdCBwYXJhbV8xMiA9IDAuMzU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV8xMCwgcGFyYW1fMTEsIHBhcmFtXzEyKTsKCXJldHVybiBjbGFtcChzLCAwLjAsIDEuMCkgKiAwLjU1Owp9CnZvaWQgRkxUX21haW5fUzFfYzAoKSAKewoJdV9hbHBoYV9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAueDsKCXVfc3BhcmtsZV9hbHBoYV9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAueTsKCXVfYmx1cl9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAuejsKCXVfcmFkaXVzX3NjYWxlX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC53OwoJZmxvYXQyIHAgPSBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCk7CglmbG9hdDIgdXZfMSA9IHAgKiB1X3Jlc29sdXRpb25fc2NhbGVfUzFfYzA7CglmbG9hdDIgZGVuc2l0eV91diA9IHV2XzEgLSBtb2QocCwgdV9ub2lzZV9zY2FsZV9TMV9jMCk7CglmbG9hdCByYWRpdXMgPSB1X21heF9yYWRpdXNfUzFfYzAgKiB1X3JhZGl1c19zY2FsZV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8xMyA9IHV2XzE7CglmbG9hdCB0dXJidWxlbmNlID0gRkxUX2ZsdXR0ZXJfbG9jYWxfdHVyYnVsZW5jZV9TMV9jMChwYXJhbV8xMyk7CglmbG9hdDIgcGFyYW1fMTQgPSBwOwoJZmxvYXQyIHBhcmFtXzE1ID0gdV9jZW50ZXJfUzFfYzA7CglmbG9hdCBwYXJhbV8xNiA9IHJhZGl1czsKCWZsb2F0IHBhcmFtXzE3ID0gMC4wNSAqIHVfbWF4X3JhZGl1c19TMV9jMDsKCWZsb2F0IHBhcmFtXzE4ID0gdV9ibHVyX1MxX2MwOwoJZmxvYXQgcmluZyA9IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfcmluZ19TMV9jMChwYXJhbV8xNCwgcGFyYW1fMTUsIHBhcmFtXzE2LCBwYXJhbV8xNywgcGFyYW1fMTgpOwoJZmxvYXQyIHBhcmFtXzE5ID0gZGVuc2l0eV91djsKCWZsb2F0IHBhcmFtXzIwID0gdV9ub2lzZV9waGFzZV9TMV9jMDsKCWZsb2F0IHNwYXJrbGUgPSAoKEZMVF9mbHV0dGVyX2xvY2FsX3NwYXJrbGVfUzFfYzAocGFyYW1fMTksIHBhcmFtXzIwKSAqIHJpbmcpICogdHVyYnVsZW5jZSkgKiB1X3NwYXJrbGVfYWxwaGFfUzFfYzA7CglmbG9hdDIgcGFyYW1fMjEgPSBwOwoJZmxvYXQyIHBhcmFtXzIyID0gdV9jZW50ZXJfUzFfYzA7CglmbG9hdCBwYXJhbV8yMyA9IHJhZGl1czsKCWZsb2F0IHBhcmFtXzI0ID0gdV9ibHVyX1MxX2MwOwoJZmxvYXQgd2F2ZV9hbHBoYSA9IChGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbV8yMSwgcGFyYW1fMjIsIHBhcmFtXzIzLCBwYXJhbV8yNCkgKiB1X2FscGhhX1MxX2MwKSAqIHVfY29sb3JfUzFfYzAudzsKCWZsb2F0NCB3YXZlX2NvbG9yID0gZmxvYXQ0KHVfY29sb3JfUzFfYzAueHl6ICogd2F2ZV9hbHBoYSwgd2F2ZV9hbHBoYSk7CglmcmFnQ29sb3JfUzFfYzAgPSBtaXgod2F2ZV9jb2xvciwgZmxvYXQ0KDEuMCksIGZsb2F0NChzcGFya2xlKSk7Cn0KaGFsZjQgcnVudGltZV9zaGFkZXJfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CglmbG9hdDIgX3RtcF8xX2Nvb3JkcyA9IHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwoJZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzAgPSBmbG9hdDQoX3RtcF8xX2Nvb3JkcywgMC4wLCAwLjApOwoJRkxUX21haW5fUzFfYzAoKTsKCXJldHVybiBoYWxmNChoYWxmNChmcmFnQ29sb3JfUzFfYzApKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIHJ1bnRpbWVfc2hhZGVyX1MxX2MwKF9pbnB1dCk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChjb3ZlcmFnZSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBNYXRyaXhFZmZlY3RfUzEob3V0cHV0Q29sb3JfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAcG9zaXRpb24IAAAAY292ZXJhZ2UFAAAAY29sb3IAAAAKAAAAbG9jYWxDb29yZAAAAAAAAA==","EEAQMYAAMAAAEADAAABAEYAAAICIAB5AABQAAAQAMAAAEATAAABAIIGAAEDCBYQCA4AAAAAAAAZQAAAAAABAAAAACAZAAAAA":"DAAAAExTS1MoDAAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDQgcmFkaWlfc2VsZWN0b3I7CmluIGZsb2F0NCBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzOwppbiBmbG9hdDQgYWFfYmxvYXRfYW5kX2NvdmVyYWdlOwppbiBmbG9hdDQgcmFkaWlfeDsKaW4gZmxvYXQ0IHJhZGlpX3k7CmluIGZsb2F0NCBza2V3OwppbiBmbG9hdDIgdHJhbnNsYXRlX2FuZF9sb2NhbHJvdGF0ZTsKaW4gaGFsZjQgY29sb3I7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZhcmNjb29yZF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgRmlsbFJSZWN0T3A6OlByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7CglmbG9hdCBhYV9ibG9hdF9tdWx0aXBsaWVyID0gMTsKCWZsb2F0MiBjb3JuZXIgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnh5OwoJZmxvYXQyIHJhZGl1c19vdXRzZXQgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnp3OwoJZmxvYXQyIGFhX2Jsb2F0X2RpcmVjdGlvbiA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS54eTsKCWZsb2F0IGlzX2xpbmVhcl9jb3ZlcmFnZSA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS53OwoJZmxvYXQyIHBpeGVsbGVuZ3RoID0gaW52ZXJzZXNxcnQoZmxvYXQyKGRvdChza2V3Lnh6LCBza2V3Lnh6KSwgZG90KHNrZXcueXcsIHNrZXcueXcpKSk7CglmbG9hdDQgbm9ybWFsaXplZF9heGlzX2RpcnMgPSBza2V3ICogcGl4ZWxsZW5ndGgueHl4eTsKCWZsb2F0MiBheGlzd2lkdGhzID0gKGFicyhub3JtYWxpemVkX2F4aXNfZGlycy54eSkgKyBhYnMobm9ybWFsaXplZF9heGlzX2RpcnMuencpKTsKCWZsb2F0MiBhYV9ibG9hdHJhZGl1cyA9IGF4aXN3aWR0aHMgKiBwaXhlbGxlbmd0aCAqIC41OwoJZmxvYXQ0IHJhZGlpX2FuZF9uZWlnaGJvcnMgPSByYWRpaV9zZWxlY3RvciogZmxvYXQ0eDQocmFkaWlfeCwgcmFkaWlfeSwgcmFkaWlfeC55eHd6LCByYWRpaV95Lnd6eXgpOwoJZmxvYXQyIHJhZGlpID0gcmFkaWlfYW5kX25laWdoYm9ycy54eTsKCWZsb2F0MiBuZWlnaGJvcl9yYWRpaSA9IHJhZGlpX2FuZF9uZWlnaGJvcnMuenc7CglmbG9hdCBjb3ZlcmFnZV9tdWx0aXBsaWVyID0gMTsKCWlmIChhbnkoZ3JlYXRlclRoYW4oYWFfYmxvYXRyYWRpdXMsIGZsb2F0MigxKSkpKSAKCXsKCQljb3JuZXIgPSBtYXgoYWJzKGNvcm5lciksIGFhX2Jsb2F0cmFkaXVzKSAqIHNpZ24oY29ybmVyKTsKCQljb3ZlcmFnZV9tdWx0aXBsaWVyID0gMSAvIChtYXgoYWFfYmxvYXRyYWRpdXMueCwgMSkgKiBtYXgoYWFfYmxvYXRyYWRpdXMueSwgMSkpOwoJCXJhZGlpID0gZmxvYXQyKDApOwoJfQoJZmxvYXQgY292ZXJhZ2UgPSBhYV9ibG9hdF9hbmRfY292ZXJhZ2UuejsKCWlmIChhbnkobGVzc1RoYW4ocmFkaWksIGFhX2Jsb2F0cmFkaXVzICogMS41KSkpIAoJewoJCXJhZGlpID0gZmxvYXQyKDApOwoJCWFhX2Jsb2F0X2RpcmVjdGlvbiA9IHNpZ24oY29ybmVyKTsKCQlpZiAoY292ZXJhZ2UgPiAuNSkgCgkJewoJCQlhYV9ibG9hdF9kaXJlY3Rpb24gPSAtYWFfYmxvYXRfZGlyZWN0aW9uOwoJCX0KCQlpc19saW5lYXJfY292ZXJhZ2UgPSAxOwoJfQoJZWxzZSAKCXsKCQlyYWRpaSA9IGNsYW1wKHJhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQluZWlnaGJvcl9yYWRpaSA9IGNsYW1wKG5laWdoYm9yX3JhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQlmbG9hdDIgc3BhY2luZyA9IDIgLSByYWRpaSAtIG5laWdoYm9yX3JhZGlpOwoJCWZsb2F0MiBleHRyYV9wYWQgPSBtYXgocGl4ZWxsZW5ndGggKiAuMDYyNSAtIHNwYWNpbmcsIGZsb2F0MigwKSk7CgkJcmFkaWkgLT0gZXh0cmFfcGFkICogLjU7Cgl9CglmbG9hdDIgYWFfb3V0c2V0ID0gYWFfYmxvYXRfZGlyZWN0aW9uICogYWFfYmxvYXRyYWRpdXMgKiBhYV9ibG9hdF9tdWx0aXBsaWVyOwoJZmxvYXQyIHZlcnRleHBvcyA9IGNvcm5lciArIHJhZGl1c19vdXRzZXQgKiByYWRpaSArIGFhX291dHNldDsKCWlmIChjb3ZlcmFnZSA+IC41KSAKCXsKCQlpZiAoYWFfYmxvYXRfZGlyZWN0aW9uLnggIT0gMCAmJiB2ZXJ0ZXhwb3MueCAqIGNvcm5lci54IDwgMCkgCgkJewoJCQlmbG9hdCBiYWNrc2V0ID0gYWJzKHZlcnRleHBvcy54KTsKCQkJdmVydGV4cG9zLnggPSAwOwoJCQl2ZXJ0ZXhwb3MueSArPSBiYWNrc2V0ICogc2lnbihjb3JuZXIueSkgKiBwaXhlbGxlbmd0aC55L3BpeGVsbGVuZ3RoLng7CgkJCWNvdmVyYWdlID0gKGNvdmVyYWdlIC0gLjUpICogYWJzKGNvcm5lci54KSAvIChhYnMoY29ybmVyLngpICsgYmFja3NldCkgKyAuNTsKCQl9CgkJaWYgKGFhX2Jsb2F0X2RpcmVjdGlvbi55ICE9IDAgJiYgdmVydGV4cG9zLnkgKiBjb3JuZXIueSA8IDApIAoJCXsKCQkJZmxvYXQgYmFja3NldCA9IGFicyh2ZXJ0ZXhwb3MueSk7CgkJCXZlcnRleHBvcy55ID0gMDsKCQkJdmVydGV4cG9zLnggKz0gYmFja3NldCAqIHNpZ24oY29ybmVyLngpICogcGl4ZWxsZW5ndGgueC9waXhlbGxlbmd0aC55OwoJCQljb3ZlcmFnZSA9IChjb3ZlcmFnZSAtIC41KSAqIGFicyhjb3JuZXIueSkgLyAoYWJzKGNvcm5lci55KSArIGJhY2tzZXQpICsgLjU7CgkJfQoJfQoJZmxvYXQyeDIgc2tld21hdHJpeCA9IGZsb2F0MngyKHNrZXcueHksIHNrZXcuencpOwoJZmxvYXQyIGRldmNvb3JkID0gdmVydGV4cG9zICogc2tld21hdHJpeCArIHRyYW5zbGF0ZV9hbmRfbG9jYWxyb3RhdGUueHk7CglpZiAoMCAhPSBpc19saW5lYXJfY292ZXJhZ2UpIAoJewoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MigwLCBjb3ZlcmFnZSAqIGNvdmVyYWdlX211bHRpcGxpZXIpOwoJfQoJZWxzZSAKCXsKCQlmbG9hdDIgYXJjY29vcmQgPSAxIC0gYWJzKHJhZGl1c19vdXRzZXQpICsgYWFfb3V0c2V0L3JhZGlpICogY29ybmVyOwoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MihhcmNjb29yZC54KzEsIGFyY2Nvb3JkLnkpOwoJfQoJc2tfUG9zaXRpb24gPSBkZXZjb29yZC54eTAxOwp9CgAAAACZAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2YXJjY29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBGaWxsUlJlY3RPcDo6UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgeF9wbHVzXzE9dmFyY2Nvb3JkX1MwLngsIHk9dmFyY2Nvb3JkX1MwLnk7CgloYWxmIGNvdmVyYWdlOwoJaWYgKDAgPT0geF9wbHVzXzEpIAoJewoJCWNvdmVyYWdlID0gaGFsZih5KTsKCX0KCWVsc2UgCgl7CgkJZmxvYXQgZm4gPSB4X3BsdXNfMSAqICh4X3BsdXNfMSAtIDIpOwoJCWZuID0gZm1hKHkseSwgZm4pOwoJCWZsb2F0IGZud2lkdGggPSBmd2lkdGgoZm4pOwoJCWNvdmVyYWdlID0gLjUgLSBoYWxmKGZuL2Zud2lkdGgpOwoJCWNvdmVyYWdlID0gY2xhbXAoY292ZXJhZ2UsIDAsIDEpOwoJfQoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChjb3ZlcmFnZSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAACAAAAA4AAAByYWRpaV9zZWxlY3RvcgAAGQAAAGNvcm5lcl9hbmRfcmFkaXVzX291dHNldHMAAAAVAAAAYWFfYmxvYXRfYW5kX2NvdmVyYWdlAAAABwAAAHJhZGlpX3gABwAAAHJhZGlpX3kABAAAAHNrZXcZAAAAdHJhbnNsYXRlX2FuZF9sb2NhbHJvdGF0ZQAAAAUAAABjb2xvcgAAAAAAAAA=","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJQBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAA6IAMAAACAAAAAABGABAAAAAEAAAAAIBEABAA":"DAAAAExTS1M7AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgABAAAAtR0AACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpmbG9hdDQgZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzA7CmZsb2F0NCBmcmFnQ29sb3JfUzFfYzA7CmZsb2F0IHVfYWxwaGFfUzFfYzA7CmZsb2F0IHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9ibHVyX1MxX2MwOwpmbG9hdCB1X3JhZGl1c19zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdV9jb2xvcl9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdV9jb21wb3NpdGVfMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jZW50ZXJfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdV9tYXhfcmFkaXVzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3Jlc29sdXRpb25fc2NhbGVfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfbm9pc2Vfc2NhbGVfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdV9ub2lzZV9waGFzZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUxX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlM19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24yX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uM19TMV9jMDsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxOwp1bmlmb3JtIGZsb2F0NCB1aW5uZXJSZWN0X1MyOwp1bmlmb3JtIGhhbGYyIHVyYWRpdXNQbHVzSGFsZl9TMjsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKZmxvYXQyIEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKTsKZmxvYXQyeDIgRkxUX2ZsdXR0ZXJfbG9jYWxfcm90YXRlMmRfUzFfYzAoZmxvYXQyIHJhZCk7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IGJsdXIpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChmbG9hdDIgcmVzb2x1dGlvbiwgaW5vdXQgZmxvYXQyIHAsIGZsb2F0MiB4eSwgZmxvYXQyIHJvdGF0aW9uLCBmbG9hdCBjZWxsX2RpYW1ldGVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHVyYnVsZW5jZV9TMV9jMChmbG9hdDIgdXYpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBibHVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAoaW5vdXQgZmxvYXQyIG4pOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAoZmxvYXQgdiwgZmxvYXQgbCwgZmxvYXQgaCk7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NwYXJrbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdCB0KTsKdm9pZCBGTFRfbWFpbl9TMV9jMCgpOwpmbG9hdDIgRkxUX2ZsdXR0ZXJfbG9jYWxfRmx1dHRlckZyYWdDb29yZF9TMV9jMCgpIAp7CglyZXR1cm4gZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzAueHk7Cn0KZmxvYXQyeDIgRkxUX2ZsdXR0ZXJfbG9jYWxfcm90YXRlMmRfUzFfYzAoZmxvYXQyIHJhZCkgCnsKCXJldHVybiBmbG9hdDJ4MihyYWQueCwgLXJhZC55LCByYWQueSwgcmFkLngpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IGJsdXIpIAp7CglmbG9hdCBibHVyX2hhbGYgPSBibHVyICogMC41OwoJZmxvYXQgZCA9IGRpc3RhbmNlKHV2LCB4eSk7CglyZXR1cm4gMS4wIC0gc21vb3Roc3RlcCgxLjAgLSBibHVyX2hhbGYsIDEuMCArIGJsdXJfaGFsZiwgZCAvIHJhZGl1cyk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAoZmxvYXQyIHJlc29sdXRpb24sIGlub3V0IGZsb2F0MiBwLCBmbG9hdDIgeHksIGZsb2F0MiByb3RhdGlvbiwgZmxvYXQgY2VsbF9kaWFtZXRlcikgCnsKCWZsb2F0MiBwYXJhbSA9IHJvdGF0aW9uOwoJcCA9IEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKHBhcmFtKSAqICh4eSAtIHApICsgeHk7CglwID0gbW9kKHAsIGZsb2F0MihjZWxsX2RpYW1ldGVyKSkgLyByZXNvbHV0aW9uOwoJZmxvYXQgY2VsbF91diA9IChjZWxsX2RpYW1ldGVyIC8gcmVzb2x1dGlvbi55KSAqIDAuNTsKCWZsb2F0IHIgPSAwLjY1ICogY2VsbF91djsKCWZsb2F0MiBwYXJhbV8xID0gcDsKCWZsb2F0MiBwYXJhbV8yID0gZmxvYXQyKGNlbGxfdXYpOwoJZmxvYXQgcGFyYW1fMyA9IHI7CglmbG9hdCBwYXJhbV80ID0gciAqIDUwLjA7CglyZXR1cm4gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMywgcGFyYW1fNCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHVyYnVsZW5jZV9TMV9jMChmbG9hdDIgdXYpIAp7CglmbG9hdDIgdXZfc2NhbGUgPSB1diAqIGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fMSA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzIgPSB1X2NpcmNsZTFfUzFfYzA7CglmbG9hdDIgcGFyYW1fMyA9IHVfcm90YXRpb24xX1MxX2MwOwoJZmxvYXQgcGFyYW1fNCA9IDAuMTc7CglmbG9hdCBfMzE5ID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW0sIHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMsIHBhcmFtXzQpOwoJZmxvYXQgZzEgPSBfMzE5OwoJZmxvYXQyIHBhcmFtXzUgPSBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbV82ID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fNyA9IHVfY2lyY2xlMl9TMV9jMDsKCWZsb2F0MiBwYXJhbV84ID0gdV9yb3RhdGlvbjJfUzFfYzA7CglmbG9hdCBwYXJhbV85ID0gMC4yOwoJZmxvYXQgXzMzMSA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtXzUsIHBhcmFtXzYsIHBhcmFtXzcsIHBhcmFtXzgsIHBhcmFtXzkpOwoJZmxvYXQgZzIgPSBfMzMxOwoJZmxvYXQyIHBhcmFtXzEwID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fMTEgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV8xMiA9IHVfY2lyY2xlM19TMV9jMDsKCWZsb2F0MiBwYXJhbV8xMyA9IHVfcm90YXRpb24zX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTQgPSAwLjI3NTsKCWZsb2F0IF8zNDQgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbV8xMCwgcGFyYW1fMTEsIHBhcmFtXzEyLCBwYXJhbV8xMywgcGFyYW1fMTQpOwoJZmxvYXQgZzMgPSBfMzQ0OwoJZmxvYXQgdiA9ICgoZzEgKiBnMSArIGcyKSAtIGczKSAqIDAuNTsKCXJldHVybiBjbGFtcCgwLjQ1ICsgMC44ICogdiwgMC4wLCAxLjApOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfcmluZ19TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGJsdXIpIAp7CglmbG9hdDIgcGFyYW0gPSB1djsKCWZsb2F0MiBwYXJhbV8xID0geHk7CglmbG9hdCBwYXJhbV8yID0gcmFkaXVzICsgdGhpY2tuZXNzOwoJZmxvYXQgcGFyYW1fMyA9IGJsdXI7CglmbG9hdCBjaXJjbGVfb3V0ZXIgPSBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbSwgcGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMyk7CglmbG9hdDIgcGFyYW1fNCA9IHV2OwoJZmxvYXQyIHBhcmFtXzUgPSB4eTsKCWZsb2F0IHBhcmFtXzYgPSBtYXgocmFkaXVzIC0gdGhpY2tuZXNzLCAwLjApOwoJZmxvYXQgcGFyYW1fNyA9IGJsdXI7CglmbG9hdCBjaXJjbGVfaW5uZXIgPSBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbV80LCBwYXJhbV81LCBwYXJhbV82LCBwYXJhbV83KTsKCXJldHVybiBjbGFtcChjaXJjbGVfb3V0ZXIgLSBjaXJjbGVfaW5uZXIsIDAuMCwgMS4wKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChpbm91dCBmbG9hdDIgbikgCnsKCW4gPSBmcmFjdChuICogZmxvYXQyKDUuMzk4NywgNS40NDIxKSk7CgluICs9IGZsb2F0Mihkb3Qobi55eCwgbiArIGZsb2F0MigyMS41MzUxLCAxNC4zMTM3KSkpOwoJZmxvYXQgeHkgPSBuLnggKiBuLnk7CglyZXR1cm4gKGZyYWN0KHh5ICogOTUuNDMwNykgKyBmcmFjdCh4eSAqIDc1LjA0OTYxKSkgLSAxLjA7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKGZsb2F0IHYsIGZsb2F0IGwsIGZsb2F0IGgpIAp7CglyZXR1cm4gc3RlcChsLCB2KSAqICgxLjAgLSBzdGVwKGgsIHYpKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQgdCkgCnsKCWZsb2F0MiBwYXJhbSA9IHV2OwoJZmxvYXQgXzI0MiA9IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKHBhcmFtKTsKCWZsb2F0IG4gPSBfMjQyOwoJZmxvYXQgcGFyYW1fMSA9IG47CglmbG9hdCBwYXJhbV8yID0gMC4wOwoJZmxvYXQgcGFyYW1fMyA9IDAuMDU7CglmbG9hdCBzID0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMpOwoJZmxvYXQgcGFyYW1fNCA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMC4zNSkpOwoJZmxvYXQgcGFyYW1fNSA9IDAuMTsKCWZsb2F0IHBhcmFtXzYgPSAwLjE1OwoJcyArPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fNCwgcGFyYW1fNSwgcGFyYW1fNik7CglmbG9hdCBwYXJhbV83ID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAwLjcpKTsKCWZsb2F0IHBhcmFtXzggPSAwLjI7CglmbG9hdCBwYXJhbV85ID0gMC4yNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzcsIHBhcmFtXzgsIHBhcmFtXzkpOwoJZmxvYXQgcGFyYW1fMTAgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDEuMDUpKTsKCWZsb2F0IHBhcmFtXzExID0gMC4zOwoJZmxvYXQgcGFyYW1fMTIgPSAwLjM1OwoJcyArPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fMTAsIHBhcmFtXzExLCBwYXJhbV8xMik7CglyZXR1cm4gY2xhbXAocywgMC4wLCAxLjApICogMC41NTsKfQp2b2lkIEZMVF9tYWluX1MxX2MwKCkgCnsKCXVfYWxwaGFfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLng7Cgl1X3NwYXJrbGVfYWxwaGFfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLnk7Cgl1X2JsdXJfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLno7Cgl1X3JhZGl1c19zY2FsZV9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAudzsKCWZsb2F0MiBwID0gRkxUX2ZsdXR0ZXJfbG9jYWxfRmx1dHRlckZyYWdDb29yZF9TMV9jMCgpOwoJZmxvYXQyIHV2XzEgPSBwICogdV9yZXNvbHV0aW9uX3NjYWxlX1MxX2MwOwoJZmxvYXQyIGRlbnNpdHlfdXYgPSB1dl8xIC0gbW9kKHAsIHVfbm9pc2Vfc2NhbGVfUzFfYzApOwoJZmxvYXQgcmFkaXVzID0gdV9tYXhfcmFkaXVzX1MxX2MwICogdV9yYWRpdXNfc2NhbGVfUzFfYzA7CglmbG9hdDIgcGFyYW1fMTMgPSB1dl8xOwoJZmxvYXQgdHVyYnVsZW5jZSA9IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAocGFyYW1fMTMpOwoJZmxvYXQyIHBhcmFtXzE0ID0gcDsKCWZsb2F0MiBwYXJhbV8xNSA9IHVfY2VudGVyX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTYgPSByYWRpdXM7CglmbG9hdCBwYXJhbV8xNyA9IDAuMDUgKiB1X21heF9yYWRpdXNfUzFfYzA7CglmbG9hdCBwYXJhbV8xOCA9IHVfYmx1cl9TMV9jMDsKCWZsb2F0IHJpbmcgPSBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAocGFyYW1fMTQsIHBhcmFtXzE1LCBwYXJhbV8xNiwgcGFyYW1fMTcsIHBhcmFtXzE4KTsKCWZsb2F0MiBwYXJhbV8xOSA9IGRlbnNpdHlfdXY7CglmbG9hdCBwYXJhbV8yMCA9IHVfbm9pc2VfcGhhc2VfUzFfYzA7CglmbG9hdCBzcGFya2xlID0gKChGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKHBhcmFtXzE5LCBwYXJhbV8yMCkgKiByaW5nKSAqIHR1cmJ1bGVuY2UpICogdV9zcGFya2xlX2FscGhhX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzIxID0gcDsKCWZsb2F0MiBwYXJhbV8yMiA9IHVfY2VudGVyX1MxX2MwOwoJZmxvYXQgcGFyYW1fMjMgPSByYWRpdXM7CglmbG9hdCBwYXJhbV8yNCA9IHVfYmx1cl9TMV9jMDsKCWZsb2F0IHdhdmVfYWxwaGEgPSAoRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fMjEsIHBhcmFtXzIyLCBwYXJhbV8yMywgcGFyYW1fMjQpICogdV9hbHBoYV9TMV9jMCkgKiB1X2NvbG9yX1MxX2MwLnc7CglmbG9hdDQgd2F2ZV9jb2xvciA9IGZsb2F0NCh1X2NvbG9yX1MxX2MwLnh5eiAqIHdhdmVfYWxwaGEsIHdhdmVfYWxwaGEpOwoJZnJhZ0NvbG9yX1MxX2MwID0gbWl4KHdhdmVfY29sb3IsIGZsb2F0NCgxLjApLCBmbG9hdDQoc3BhcmtsZSkpOwp9CmhhbGY0IHJ1bnRpbWVfc2hhZGVyX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKCWZsdXR0ZXJfRnJhZ0Nvb3JkX1MxX2MwID0gZmxvYXQ0KF90bXBfMV9jb29yZHMsIDAuMCwgMC4wKTsKCUZMVF9tYWluX1MxX2MwKCk7CglyZXR1cm4gaGFsZjQoaGFsZjQoZnJhZ0NvbG9yX1MxX2MwKSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBydW50aW1lX3NoYWRlcl9TMV9jMChfaW5wdXQpOwp9CmhhbGY0IENpcmN1bGFyUlJlY3RfUzIoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MyLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MyLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzIueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChjb3ZlcmFnZSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBNYXRyaXhFZmZlY3RfUzEob3V0cHV0Q29sb3JfUzApOwoJaGFsZjQgb3V0cHV0X1MyOwoJb3V0cHV0X1MyID0gQ2lyY3VsYXJSUmVjdF9TMihvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0X1MyOwoJfQp9CgAAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","GYQAAAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAADAAYAAAACAAAAAAACCAYAAA":"DAAAAExTS1MaAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGhhbGY0IGNvbG9yOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAVwEAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZjb2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAcG9zaXRpb24FAAAAY29sb3IAAAAAAAAA","DASAAAAAAAAAAAEAAFQAAIGAAEAOB77776PUEAIBAAAAAABAAAAAAABAMQAAAMYAAAAAAAQAAAABAMQAAAAA":"DAAAAExTS1MpAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0MiB1QXRsYXNTaXplSW52X1MwOwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gdXNob3J0MiBpblRleHR1cmVDb29yZHM7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBCaXRtYXBUZXh0CglpbnQgdGV4SWR4ID0gMDsKCWZsb2F0MiB1bm9ybVRleENvb3JkcyA9IGZsb2F0MihpblRleHR1cmVDb29yZHMueCwgaW5UZXh0dXJlQ29vcmRzLnkpOwoJdlRleHR1cmVDb29yZHNfUzAgPSB1bm9ybVRleENvb3JkcyAqIHVBdGxhc1NpemVJbnZfUzA7Cgl2VGV4SW5kZXhfUzAgPSBmbG9hdCh0ZXhJZHgpOwoJZmxvYXQyIF90bXBfMV9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCXNrX1Bvc2l0aW9uID0gaW5Qb3NpdGlvbi54eTAxOwp9CgAAAAAAAAAsAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gaGFsZjQgdUNvbG9yX1MwOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUZXh0dXJlQ29vcmRzX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0IHZUZXhJbmRleF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEJpdG1hcFRleHQKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB1Q29sb3JfUzA7CgloYWxmNCB0ZXhDb2xvcjsKCXsKCQl0ZXhDb2xvciA9IHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMCwgdlRleHR1cmVDb29yZHNfUzApOwoJfQoJb3V0cHV0Q29sb3JfUzAgPSBvdXRwdXRDb2xvcl9TMCAqIHRleENvbG9yOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgAAAGluUG9zaXRpb24AAA8AAABpblRleHR1cmVDb29yZHMAAAAAAA==","GYQACAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAADAAYAAAACAAAAAAACCAYAAA":"DAAAAExTS1MaAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGhhbGY0IGNvbG9yOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAVwEAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZjb2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAcG9zaXRpb24FAAAAY29sb3IAAAAAAAAA","BYIBQAAABQAAIAABBYAAAEIXBAAP777777777777AAAAAAAAAAAABGABAAAAAEAAAAAIBEABAAAAA":"DAAAAExTS1OJAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBEZWZhdWx0R2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IGNvbG9yID0gaW5Db2xvcjsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJZmxvYXQyIF90bXBfMV9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCWZsb2F0MiBfdG1wXzNfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cglza19Qb3NpdGlvbiA9IF90bXBfMV9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAAFEBAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBEZWZhdWx0R2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IAAAAAAA==","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAHIBIA5HZ2CAAAAAAAAAACAAAAASAEAAQAAAAAUCCQAQQGAAAAAAAAAAAGMAAAAAAAIAAAAAQGIAAAAAAA":"DAAAAExTS1POAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzA7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfM19TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfM19TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzFfYzApICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAAAAAAAYAMAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzA7CnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMTsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18zX1MwOwpoYWxmNCBUZXh0dXJlRWZmZWN0X1MxX2MwX2MwKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzEsIHZUcmFuc2Zvcm1lZENvb3Jkc18zX1MwKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIFRleHR1cmVFZmZlY3RfUzFfYzBfYzAoX2lucHV0KTsKfQpoYWxmNCBEaXNhYmxlQ292ZXJhZ2VBc0FscGhhX1MxKGhhbGY0IF9pbnB1dCkgCnsKCV9pbnB1dCA9IE1hdHJpeEVmZmVjdF9TMV9jMChfaW5wdXQpOwoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CglyZXR1cm4gaGFsZjQoX2lucHV0KTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IERpc2FibGVDb3ZlcmFnZUFzQWxwaGFfUzEob3V0cHV0Q29sb3JfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAJIBAGMVUOTUABAAAAAAAIAAAAAWFBIEMVUOTUAAAAAAAAAIAAAACICAACAAAAACQIKACCAYAAAAAAAAAAAZQAAAAAABAAAAACAZAAAAAAA":"DAAAAExTS1PIAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfMl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzEpICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAAAAKkFAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKY29uc3QgaW50IGtNYXhMb29wTGltaXRfUzFfYzAgPSA4Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzA7CnVuaWZvcm0gaGFsZjQgdW9mZnNldHNBbmRLZXJuZWxfUzFfYzBbMTRdOwp1bmlmb3JtIGhhbGYyIHVkaXJfUzFfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MxOwpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CmhhbGY0IFRleHR1cmVFZmZlY3RfUzFfYzBfYzBfYzAoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCXJldHVybiBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzEsIF9jb29yZHMpOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMV9jMF9jMChoYWxmNCBfaW5wdXQsIGZsb2F0MiBfY29vcmRzKSAKewoJcmV0dXJuIFRleHR1cmVFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBmbG9hdDN4Mih1bWF0cml4X1MxX2MwX2MwKSAqIF9jb29yZHMueHkxKTsKfQpoYWxmNCBydW50aW1lX3NoYWRlcl9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzFfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CgloYWxmNCBzdW0gPSBoYWxmNCgwLjApOwoJZm9yIChpbnQgaSA9IDA7aSA8IGtNYXhMb29wTGltaXRfUzFfYzA7ICsraSkgCgl7CgkJaGFsZjQgcyA9IHVvZmZzZXRzQW5kS2VybmVsX1MxX2MwW2ldOwoJCXN1bSArPSBzLnkgKiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX3RtcF8wX2luQ29sb3IsIF90bXBfMV9jb29yZHMgKyBmbG9hdDIocy54ICogdWRpcl9TMV9jMCkpOwoJCXN1bSArPSBzLncgKiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX3RtcF8wX2luQ29sb3IsIF90bXBfMV9jb29yZHMgKyBmbG9hdDIocy56ICogdWRpcl9TMV9jMCkpOwoJfQoJcmV0dXJuIGhhbGY0KHN1bSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBydW50aW1lX3NoYWRlcl9TMV9jMChfaW5wdXQpOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gTWF0cml4RWZmZWN0X1MxKG91dHB1dENvbG9yX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRfUzEgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAABwb3NpdGlvbgUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAAAAAAA","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAJIBAGMVUOTUABAAADAMAIAAAAAWFBIEMVUOTUAAAAADAMAIAAAACI2DACAAAAACQIKACCAYAAYDAAAAAAAZQAAAAAABAAAAACAZAAAAAAA":"DAAAAExTS1PIAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfMl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzEpICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAAAAFcIAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKY29uc3QgaW50IGtNYXhMb29wTGltaXRfUzFfYzAgPSA4Owp1bmlmb3JtIGZsb2F0NCB1c3Vic2V0X1MxX2MwX2MwX2MwOwp1bmlmb3JtIGZsb2F0NCB1Y2xhbXBfUzFfYzBfYzBfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMV9jMF9jMDsKdW5pZm9ybSBoYWxmNCB1b2Zmc2V0c0FuZEtlcm5lbF9TMV9jMFsxNF07CnVuaWZvcm0gaGFsZjIgdWRpcl9TMV9jMDsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzE7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKaGFsZjQgVGV4dHVyZUVmZmVjdF9TMV9jMF9jMF9jMChoYWxmNCBfaW5wdXQsIGZsb2F0MiBfY29vcmRzKSAKewoJZmxvYXQyIGluQ29vcmQgPSBfY29vcmRzOwoJZmxvYXQyIHN1YnNldENvb3JkOwoJewoJCWZsb2F0IHcgPSB1c3Vic2V0X1MxX2MwX2MwX2MwLnogLSB1c3Vic2V0X1MxX2MwX2MwX2MwLng7CgkJZmxvYXQgdzIgPSAyICogdzsKCQlmbG9hdCBtID0gbW9kKGluQ29vcmQueCAtIHVzdWJzZXRfUzFfYzBfYzBfYzAueCwgdzIpOwoJCXN1YnNldENvb3JkLnggPSBtaXgobSwgdzIgLSBtLCBzdGVwKHcsIG0pKSArIHVzdWJzZXRfUzFfYzBfYzBfYzAueDsKCX0KCXsKCQlmbG9hdCB3ID0gdXN1YnNldF9TMV9jMF9jMF9jMC53IC0gdXN1YnNldF9TMV9jMF9jMF9jMC55OwoJCWZsb2F0IHcyID0gMiAqIHc7CgkJZmxvYXQgbSA9IG1vZChpbkNvb3JkLnkgLSB1c3Vic2V0X1MxX2MwX2MwX2MwLnksIHcyKTsKCQlzdWJzZXRDb29yZC55ID0gbWl4KG0sIHcyIC0gbSwgc3RlcCh3LCBtKSkgKyB1c3Vic2V0X1MxX2MwX2MwX2MwLnk7Cgl9CglmbG9hdDIgY2xhbXBlZENvb3JkOwoJY2xhbXBlZENvb3JkID0gY2xhbXAoc3Vic2V0Q29vcmQsIHVjbGFtcF9TMV9jMF9jMF9jMC54eSwgdWNsYW1wX1MxX2MwX2MwX2MwLnp3KTsKCWhhbGY0IHRleHR1cmVDb2xvciA9IHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMSwgY2xhbXBlZENvb3JkKTsKCXJldHVybiB0ZXh0dXJlQ29sb3I7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxX2MwX2MwKGhhbGY0IF9pbnB1dCwgZmxvYXQyIF9jb29yZHMpIAp7CglyZXR1cm4gVGV4dHVyZUVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGZsb2F0M3gyKHVtYXRyaXhfUzFfYzBfYzApICogX2Nvb3Jkcy54eTEpOwp9CmhhbGY0IHJ1bnRpbWVfc2hhZGVyX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKCWhhbGY0IHN1bSA9IGhhbGY0KDAuMCk7Cglmb3IgKGludCBpID0gMDtpIDwga01heExvb3BMaW1pdF9TMV9jMDsgKytpKSAKCXsKCQloYWxmNCBzID0gdW9mZnNldHNBbmRLZXJuZWxfUzFfYzBbaV07CgkJc3VtICs9IHMueSAqIE1hdHJpeEVmZmVjdF9TMV9jMF9jMChfdG1wXzBfaW5Db2xvciwgX3RtcF8xX2Nvb3JkcyArIGZsb2F0MihzLnggKiB1ZGlyX1MxX2MwKSk7CgkJc3VtICs9IHMudyAqIE1hdHJpeEVmZmVjdF9TMV9jMF9jMChfdG1wXzBfaW5Db2xvciwgX3RtcF8xX2Nvb3JkcyArIGZsb2F0MihzLnogKiB1ZGlyX1MxX2MwKSk7Cgl9CglyZXR1cm4gaGFsZjQoc3VtKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIHJ1bnRpbWVfc2hhZGVyX1MxX2MwKF9pbnB1dCk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBNYXRyaXhFZmZlY3RfUzEob3V0cHV0Q29sb3JfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAABwb3NpdGlvbgUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAAAAAAA","GXQAAGAABBYAAAEIXBAAAGEAMAAAAAAAAAAAAAAAYAGAAAAAQAAAAAAAQQGAAAAA":"DAAAAExTS1OYAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKaW4gZmxvYXQ0IGluUXVhZEVkZ2U7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0NCB2UXVhZEVkZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBRdWFkRWRnZQoJdlF1YWRFZGdlX1MwID0gaW5RdWFkRWRnZTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzBfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cglza19Qb3NpdGlvbiA9IF90bXBfMF9pblBvc2l0aW9uLnh5MDE7Cn0KBAAAAF4DAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDQgdlF1YWRFZGdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZEVkZ2UKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWhhbGYgZWRnZUFscGhhOwoJaGFsZjIgZHV2ZHggPSBoYWxmMihkRmR4KHZRdWFkRWRnZV9TMC54eSkpOwoJaGFsZjIgZHV2ZHkgPSBoYWxmMihkRmR5KHZRdWFkRWRnZV9TMC54eSkpOwoJaWYgKHZRdWFkRWRnZV9TMC56ID4gMC4wICYmIHZRdWFkRWRnZV9TMC53ID4gMC4wKSAKCXsKCQllZGdlQWxwaGEgPSBoYWxmKG1pbihtaW4odlF1YWRFZGdlX1MwLnosIHZRdWFkRWRnZV9TMC53KSArIDAuNSwgMS4wKSk7Cgl9CgllbHNlIAoJewoJCWhhbGYyIGdGID0gaGFsZjIoaGFsZigyLjAqdlF1YWRFZGdlX1MwLngqZHV2ZHgueCAtIGR1dmR4LnkpLCAgICAgICAgICAgICAgICAgaGFsZigyLjAqdlF1YWRFZGdlX1MwLngqZHV2ZHkueCAtIGR1dmR5LnkpKTsKCQllZGdlQWxwaGEgPSBoYWxmKHZRdWFkRWRnZV9TMC54KnZRdWFkRWRnZV9TMC54IC0gdlF1YWRFZGdlX1MwLnkpOwoJCWVkZ2VBbHBoYSA9IHNhdHVyYXRlKDAuNSAtIGVkZ2VBbHBoYSAvIGxlbmd0aChnRikpOwoJfQoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChlZGdlQWxwaGEpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAEAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAKAAAAaW5RdWFkRWRnZQAAAAAAAA==","GYJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGABZAA6IAAAAACAAAAAADGAAAAAAAEAAAAAIDEAAAAAAA":"DAAAAExTS1MwAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgEAAAB+AwAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHVpbm5lclJlY3RfUzE7CnVuaWZvcm0gaGFsZjIgdXJhZGl1c1BsdXNIYWxmX1MxOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZsb2NhbENvb3JkX1MwOwpoYWxmNCBDaXJjdWxhclJSZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCWZsb2F0MiBkeHkwID0gdWlubmVyUmVjdF9TMS5MVCAtIHNrX0ZyYWdDb29yZC54eTsKCWZsb2F0MiBkeHkxID0gc2tfRnJhZ0Nvb3JkLnh5IC0gdWlubmVyUmVjdF9TMS5SQjsKCWZsb2F0MiBkeHkgPSBtYXgobWF4KGR4eTAsIGR4eTEpLCAwLjApOwoJaGFsZiBhbHBoYSA9IGhhbGYoc2F0dXJhdGUodXJhZGl1c1BsdXNIYWxmX1MxLnggLSBsZW5ndGgoZHh5KSkpOwoJcmV0dXJuIF9pbnB1dCAqIGFscGhhOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwID0gaGFsZjQoMSk7CglmbG9hdDIgdGV4Q29vcmQ7Cgl0ZXhDb29yZCA9IHZsb2NhbENvb3JkX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSAoYmxlbmRfbW9kdWxhdGUoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCksIGhhbGY0KDEpKSk7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQ2lyY3VsYXJSUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAABwb3NpdGlvbgoAAABsb2NhbENvb3JkAAAAAAAA","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJQBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAALIAAAAAGFM37JKEAAAAAMAAAAAIAAAAAAAMBCQN25XWQUAAAAAAYAAAAAAAAAABGABAAAAAEAAAAAIBEABAAAAA":"DAAAAExTS1M7AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgABAAAAKh8AACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpmbG9hdDQgZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzA7CmZsb2F0NCBmcmFnQ29sb3JfUzFfYzA7CmZsb2F0IHVfYWxwaGFfUzFfYzA7CmZsb2F0IHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9ibHVyX1MxX2MwOwpmbG9hdCB1X3JhZGl1c19zY2FsZV9TMV9jMDsKY29uc3QgaW50IGtGaWxsQUFfUzJfYzAgPSAxOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzJfYzAgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzJfYzAgPSAzOwp1bmlmb3JtIGZsb2F0NCB1X2NvbG9yX1MxX2MwOwp1bmlmb3JtIGZsb2F0NCB1X2NvbXBvc2l0ZV8xX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NlbnRlcl9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1X21heF9yYWRpdXNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcmVzb2x1dGlvbl9zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9ub2lzZV9zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1X25vaXNlX3BoYXNlX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlMl9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24zX1MxX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CnVuaWZvcm0gZmxvYXQ0IHVjaXJjbGVfUzJfYzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0IHZjb3ZlcmFnZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CmZsb2F0MiBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCk7CmZsb2F0MngyIEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKGZsb2F0MiByYWQpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCBibHVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAoZmxvYXQyIHJlc29sdXRpb24sIGlub3V0IGZsb2F0MiBwLCBmbG9hdDIgeHksIGZsb2F0MiByb3RhdGlvbiwgZmxvYXQgY2VsbF9kaWFtZXRlcik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAoZmxvYXQyIHV2KTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgYmx1cik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKGlub3V0IGZsb2F0MiBuKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKGZsb2F0IHYsIGZsb2F0IGwsIGZsb2F0IGgpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQgdCk7CnZvaWQgRkxUX21haW5fUzFfYzAoKTsKZmxvYXQyIEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKSAKewoJcmV0dXJuIGZsdXR0ZXJfRnJhZ0Nvb3JkX1MxX2MwLnh5Owp9CmZsb2F0MngyIEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKGZsb2F0MiByYWQpIAp7CglyZXR1cm4gZmxvYXQyeDIocmFkLngsIC1yYWQueSwgcmFkLnksIHJhZC54KTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCBibHVyKSAKewoJZmxvYXQgYmx1cl9oYWxmID0gYmx1ciAqIDAuNTsKCWZsb2F0IGQgPSBkaXN0YW5jZSh1diwgeHkpOwoJcmV0dXJuIDEuMCAtIHNtb290aHN0ZXAoMS4wIC0gYmx1cl9oYWxmLCAxLjAgKyBibHVyX2hhbGYsIGQgLyByYWRpdXMpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKGZsb2F0MiByZXNvbHV0aW9uLCBpbm91dCBmbG9hdDIgcCwgZmxvYXQyIHh5LCBmbG9hdDIgcm90YXRpb24sIGZsb2F0IGNlbGxfZGlhbWV0ZXIpIAp7CglmbG9hdDIgcGFyYW0gPSByb3RhdGlvbjsKCXAgPSBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChwYXJhbSkgKiAoeHkgLSBwKSArIHh5OwoJcCA9IG1vZChwLCBmbG9hdDIoY2VsbF9kaWFtZXRlcikpIC8gcmVzb2x1dGlvbjsKCWZsb2F0IGNlbGxfdXYgPSAoY2VsbF9kaWFtZXRlciAvIHJlc29sdXRpb24ueSkgKiAwLjU7CglmbG9hdCByID0gMC42NSAqIGNlbGxfdXY7CglmbG9hdDIgcGFyYW1fMSA9IHA7CglmbG9hdDIgcGFyYW1fMiA9IGZsb2F0MihjZWxsX3V2KTsKCWZsb2F0IHBhcmFtXzMgPSByOwoJZmxvYXQgcGFyYW1fNCA9IHIgKiA1MC4wOwoJcmV0dXJuIEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMsIHBhcmFtXzQpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAoZmxvYXQyIHV2KSAKewoJZmxvYXQyIHV2X3NjYWxlID0gdXYgKiBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbSA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzEgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV8yID0gdV9jaXJjbGUxX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzMgPSB1X3JvdGF0aW9uMV9TMV9jMDsKCWZsb2F0IHBhcmFtXzQgPSAwLjE3OwoJZmxvYXQgXzMxOSA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtLCBwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zLCBwYXJhbV80KTsKCWZsb2F0IGcxID0gXzMxOTsKCWZsb2F0MiBwYXJhbV81ID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fNiA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzcgPSB1X2NpcmNsZTJfUzFfYzA7CglmbG9hdDIgcGFyYW1fOCA9IHVfcm90YXRpb24yX1MxX2MwOwoJZmxvYXQgcGFyYW1fOSA9IDAuMjsKCWZsb2F0IF8zMzEgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbV81LCBwYXJhbV82LCBwYXJhbV83LCBwYXJhbV84LCBwYXJhbV85KTsKCWZsb2F0IGcyID0gXzMzMTsKCWZsb2F0MiBwYXJhbV8xMCA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzExID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fMTIgPSB1X2NpcmNsZTNfUzFfYzA7CglmbG9hdDIgcGFyYW1fMTMgPSB1X3JvdGF0aW9uM19TMV9jMDsKCWZsb2F0IHBhcmFtXzE0ID0gMC4yNzU7CglmbG9hdCBfMzQ0ID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW1fMTAsIHBhcmFtXzExLCBwYXJhbV8xMiwgcGFyYW1fMTMsIHBhcmFtXzE0KTsKCWZsb2F0IGczID0gXzM0NDsKCWZsb2F0IHYgPSAoKGcxICogZzEgKyBnMikgLSBnMykgKiAwLjU7CglyZXR1cm4gY2xhbXAoMC40NSArIDAuOCAqIHYsIDAuMCwgMS4wKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBibHVyKSAKewoJZmxvYXQyIHBhcmFtID0gdXY7CglmbG9hdDIgcGFyYW1fMSA9IHh5OwoJZmxvYXQgcGFyYW1fMiA9IHJhZGl1cyArIHRoaWNrbmVzczsKCWZsb2F0IHBhcmFtXzMgPSBibHVyOwoJZmxvYXQgY2lyY2xlX291dGVyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW0sIHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMpOwoJZmxvYXQyIHBhcmFtXzQgPSB1djsKCWZsb2F0MiBwYXJhbV81ID0geHk7CglmbG9hdCBwYXJhbV82ID0gbWF4KHJhZGl1cyAtIHRoaWNrbmVzcywgMC4wKTsKCWZsb2F0IHBhcmFtXzcgPSBibHVyOwoJZmxvYXQgY2lyY2xlX2lubmVyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fNCwgcGFyYW1fNSwgcGFyYW1fNiwgcGFyYW1fNyk7CglyZXR1cm4gY2xhbXAoY2lyY2xlX291dGVyIC0gY2lyY2xlX2lubmVyLCAwLjAsIDEuMCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAoaW5vdXQgZmxvYXQyIG4pIAp7CgluID0gZnJhY3QobiAqIGZsb2F0Mig1LjM5ODcsIDUuNDQyMSkpOwoJbiArPSBmbG9hdDIoZG90KG4ueXgsIG4gKyBmbG9hdDIoMjEuNTM1MSwgMTQuMzEzNykpKTsKCWZsb2F0IHh5ID0gbi54ICogbi55OwoJcmV0dXJuIChmcmFjdCh4eSAqIDk1LjQzMDcpICsgZnJhY3QoeHkgKiA3NS4wNDk2MSkpIC0gMS4wOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChmbG9hdCB2LCBmbG9hdCBsLCBmbG9hdCBoKSAKewoJcmV0dXJuIHN0ZXAobCwgdikgKiAoMS4wIC0gc3RlcChoLCB2KSk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0IHQpIAp7CglmbG9hdDIgcGFyYW0gPSB1djsKCWZsb2F0IF8yNDIgPSBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChwYXJhbSk7CglmbG9hdCBuID0gXzI0MjsKCWZsb2F0IHBhcmFtXzEgPSBuOwoJZmxvYXQgcGFyYW1fMiA9IDAuMDsKCWZsb2F0IHBhcmFtXzMgPSAwLjA1OwoJZmxvYXQgcyA9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zKTsKCWZsb2F0IHBhcmFtXzQgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDAuMzUpKTsKCWZsb2F0IHBhcmFtXzUgPSAwLjE7CglmbG9hdCBwYXJhbV82ID0gMC4xNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzQsIHBhcmFtXzUsIHBhcmFtXzYpOwoJZmxvYXQgcGFyYW1fNyA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMC43KSk7CglmbG9hdCBwYXJhbV84ID0gMC4yOwoJZmxvYXQgcGFyYW1fOSA9IDAuMjU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV83LCBwYXJhbV84LCBwYXJhbV85KTsKCWZsb2F0IHBhcmFtXzEwID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAxLjA1KSk7CglmbG9hdCBwYXJhbV8xMSA9IDAuMzsKCWZsb2F0IHBhcmFtXzEyID0gMC4zNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzEwLCBwYXJhbV8xMSwgcGFyYW1fMTIpOwoJcmV0dXJuIGNsYW1wKHMsIDAuMCwgMS4wKSAqIDAuNTU7Cn0Kdm9pZCBGTFRfbWFpbl9TMV9jMCgpIAp7Cgl1X2FscGhhX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC54OwoJdV9zcGFya2xlX2FscGhhX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC55OwoJdV9ibHVyX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC56OwoJdV9yYWRpdXNfc2NhbGVfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLnc7CglmbG9hdDIgcCA9IEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKTsKCWZsb2F0MiB1dl8xID0gcCAqIHVfcmVzb2x1dGlvbl9zY2FsZV9TMV9jMDsKCWZsb2F0MiBkZW5zaXR5X3V2ID0gdXZfMSAtIG1vZChwLCB1X25vaXNlX3NjYWxlX1MxX2MwKTsKCWZsb2F0IHJhZGl1cyA9IHVfbWF4X3JhZGl1c19TMV9jMCAqIHVfcmFkaXVzX3NjYWxlX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzEzID0gdXZfMTsKCWZsb2F0IHR1cmJ1bGVuY2UgPSBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKHBhcmFtXzEzKTsKCWZsb2F0MiBwYXJhbV8xNCA9IHA7CglmbG9hdDIgcGFyYW1fMTUgPSB1X2NlbnRlcl9TMV9jMDsKCWZsb2F0IHBhcmFtXzE2ID0gcmFkaXVzOwoJZmxvYXQgcGFyYW1fMTcgPSAwLjA1ICogdV9tYXhfcmFkaXVzX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTggPSB1X2JsdXJfUzFfYzA7CglmbG9hdCByaW5nID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKHBhcmFtXzE0LCBwYXJhbV8xNSwgcGFyYW1fMTYsIHBhcmFtXzE3LCBwYXJhbV8xOCk7CglmbG9hdDIgcGFyYW1fMTkgPSBkZW5zaXR5X3V2OwoJZmxvYXQgcGFyYW1fMjAgPSB1X25vaXNlX3BoYXNlX1MxX2MwOwoJZmxvYXQgc3BhcmtsZSA9ICgoRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChwYXJhbV8xOSwgcGFyYW1fMjApICogcmluZykgKiB0dXJidWxlbmNlKSAqIHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8yMSA9IHA7CglmbG9hdDIgcGFyYW1fMjIgPSB1X2NlbnRlcl9TMV9jMDsKCWZsb2F0IHBhcmFtXzIzID0gcmFkaXVzOwoJZmxvYXQgcGFyYW1fMjQgPSB1X2JsdXJfUzFfYzA7CglmbG9hdCB3YXZlX2FscGhhID0gKEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzIxLCBwYXJhbV8yMiwgcGFyYW1fMjMsIHBhcmFtXzI0KSAqIHVfYWxwaGFfUzFfYzApICogdV9jb2xvcl9TMV9jMC53OwoJZmxvYXQ0IHdhdmVfY29sb3IgPSBmbG9hdDQodV9jb2xvcl9TMV9jMC54eXogKiB3YXZlX2FscGhhLCB3YXZlX2FscGhhKTsKCWZyYWdDb2xvcl9TMV9jMCA9IG1peCh3YXZlX2NvbG9yLCBmbG9hdDQoMS4wKSwgZmxvYXQ0KHNwYXJrbGUpKTsKfQpoYWxmNCBydW50aW1lX3NoYWRlcl9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzFfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CglmbHV0dGVyX0ZyYWdDb29yZF9TMV9jMCA9IGZsb2F0NChfdG1wXzFfY29vcmRzLCAwLjAsIDAuMCk7CglGTFRfbWFpbl9TMV9jMCgpOwoJcmV0dXJuIGhhbGY0KGhhbGY0KGZyYWdDb2xvcl9TMV9jMCkpOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gcnVudGltZV9zaGFkZXJfUzFfYzAoX2lucHV0KTsKfQpoYWxmNCBDaXJjbGVfUzJfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8yX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGQ7CglpZiAoaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MyX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMl9jMCkgCgl7CgkJZCA9IGhhbGYoKGxlbmd0aCgodWNpcmNsZV9TMl9jMC54eSAtIHNrX0ZyYWdDb29yZC54eSkgKiB1Y2lyY2xlX1MyX2MwLncpIC0gMS4wKSAqIHVjaXJjbGVfUzJfYzAueik7Cgl9CgllbHNlIAoJewoJCWQgPSBoYWxmKCgxLjAgLSBsZW5ndGgoKHVjaXJjbGVfUzJfYzAueHkgLSBza19GcmFnQ29vcmQueHkpICogdWNpcmNsZV9TMl9jMC53KSkgKiB1Y2lyY2xlX1MyX2MwLnopOwoJfQoJcmV0dXJuIGhhbGY0KGhhbGY0KGludCgxKSA9PSBrRmlsbEFBX1MyX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMl9jMCA/IHNhdHVyYXRlKGQpIDogaGFsZihkID4gMC41KSkpOwp9CmhhbGY0IEJsZW5kX1MyKGhhbGY0IF9zcmMsIGhhbGY0IF9kc3QpIAp7CglyZXR1cm4gYmxlbmRfbW9kdWxhdGUoX3NyYywgQ2lyY2xlX1MyX2MwKF9zcmMpKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgY292ZXJhZ2UgPSB2Y292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGNvdmVyYWdlKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb2xvcl9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBCbGVuZF9TMihvdXRwdXRDb3ZlcmFnZV9TMCwgaGFsZjQoMSkpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dF9TMjsKCX0KfQoAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","GYQACAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAADEAAGAAAAAAAAAIAAAAAPAIABAAAAABAGEAAAAEAAAABNARCAIAAAAAAAAAAAAAYAGAAAAAQAAAAAAAQQGAAAAA":"DAAAAExTS1O8AQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzA7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc180X1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCXZjb2xvcl9TMCA9IGNvbG9yOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwoJewoJCXZUcmFuc2Zvcm1lZENvb3Jkc180X1MwID0gZmxvYXQzeDIodW1hdHJpeF9TMV9jMF9jMCkgKiBwb3NpdGlvbi54eTE7Cgl9Cn0KAAAAAI0DAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxX2MwX2MwOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzE7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfNF9TMDsKaGFsZjQgVGV4dHVyZUVmZmVjdF9TMV9jMF9jMF9jMChoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MxLCB2VHJhbnNmb3JtZWRDb29yZHNfNF9TMCkuMDAwcjsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIFRleHR1cmVFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0KTsKfQpoYWxmNCBEZXZpY2VTcGFjZV9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gTWF0cml4RWZmZWN0X1MxX2MwX2MwKF9pbnB1dCk7Cn0KaGFsZjQgQmxlbmRfUzEoaGFsZjQgX3NyYywgaGFsZjQgX2RzdCkgCnsKCXJldHVybiBibGVuZF9kc3RfaW4oRGV2aWNlU3BhY2VfUzFfYzAoX3NyYyksIF9zcmMpOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQmxlbmRfUzEob3V0cHV0Q292ZXJhZ2VfUzAsIGhhbGY0KDEpKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dF9TMTsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAABwb3NpdGlvbgUAAABjb2xvcgAAAAAAAAA=","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAHIBK2VD3EOCAAAAAABUXHIMAQAAAAWSQ4HO4SAAAAAMAAAAAEBUEFLMJAIAAAQCI6KVAYAAAAAAAAAAAQAAEACUA2JT4HAIAAAADIIODXOJIBAAAGAAAAACAKAC5XEQEAAAAAEPF2SMAAAAAAAAIAAAACXUUGB3XUUAQAADAAAAAAABARO3SJCAAAAACGSZJWCAAAAAAAIAAAABLFBUEFLMJAIAAAAAAAAAAACIMVSTUFAEAAAAAIAAAAAWFBSHSVIGAAAAAAAAAAAAABEBAABAAAAADIEEQCEAAAAAAAAAAAQAMQAAAAAAAQAAAABAMQAAA":"DAAAAExTS1PaAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzBfYzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfNl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfNl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzFfYzBfYzBfYzEpICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAABAAAAcQkAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQp1bmlmb3JtIGhhbGY0IHVzdGFydF9TMV9jMF9jMF9jMDsKdW5pZm9ybSBoYWxmNCB1ZW5kX1MxX2MwX2MwX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzBfYzE7CnVuaWZvcm0gaGFsZjQgdWxlZnRCb3JkZXJDb2xvcl9TMV9jMF9jMDsKdW5pZm9ybSBoYWxmNCB1cmlnaHRCb3JkZXJDb2xvcl9TMV9jMF9jMDsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxX2MxOwp1bmlmb3JtIGhhbGYgdXJhbmdlX1MxOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzE7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfNl9TMDsKaGFsZjQgU2luZ2xlSW50ZXJ2YWxDb2xvcml6ZXJfUzFfYzBfYzBfYzAoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSBfY29vcmRzOwoJcmV0dXJuIGhhbGY0KG1peCh1c3RhcnRfUzFfYzBfYzBfYzAsIHVlbmRfUzFfYzBfYzBfYzAsIGhhbGYoX3RtcF8xX2Nvb3Jkcy54KSkpOwp9CmhhbGY0IExpbmVhckxheW91dF9TMV9jMF9jMF9jMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzJfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzNfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzZfUzA7CglyZXR1cm4gaGFsZjQoaGFsZjQoaGFsZihfdG1wXzNfY29vcmRzLngpICsgMWUtMDUsIDEuMCwgMC4wLCAwLjApKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzEoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIExpbmVhckxheW91dF9TMV9jMF9jMF9jMV9jMChfaW5wdXQpOwp9CmhhbGY0IENsYW1wZWRHcmFkaWVudF9TMV9jMF9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzRfaW5Db2xvciA9IF9pbnB1dDsKCWhhbGY0IHQgPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzEoX3RtcF80X2luQ29sb3IpOwoJaGFsZjQgb3V0Q29sb3I7CglpZiAoIWJvb2woaW50KDEpKSAmJiB0LnkgPCAwLjApIAoJewoJCW91dENvbG9yID0gaGFsZjQoMC4wKTsKCX0KCWVsc2UgaWYgKHQueCA8IDAuMCkgCgl7CgkJb3V0Q29sb3IgPSB1bGVmdEJvcmRlckNvbG9yX1MxX2MwX2MwOwoJfQoJZWxzZSBpZiAodC54ID4gMS4wKSAKCXsKCQlvdXRDb2xvciA9IHVyaWdodEJvcmRlckNvbG9yX1MxX2MwX2MwOwoJfQoJZWxzZSAKCXsKCQlvdXRDb2xvciA9IFNpbmdsZUludGVydmFsQ29sb3JpemVyX1MxX2MwX2MwX2MwKF90bXBfNF9pbkNvbG9yLCBmbG9hdDIoaGFsZjIodC54LCAwLjApKSk7Cgl9CglyZXR1cm4gaGFsZjQob3V0Q29sb3IpOwp9CmhhbGY0IERpc2FibGVDb3ZlcmFnZUFzQWxwaGFfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJX2lucHV0ID0gQ2xhbXBlZEdyYWRpZW50X1MxX2MwX2MwKF9pbnB1dCk7CgloYWxmNCBfdG1wXzVfaW5Db2xvciA9IF9pbnB1dDsKCXJldHVybiBoYWxmNChfaW5wdXQpOwp9CmhhbGY0IFRleHR1cmVFZmZlY3RfUzFfYzFfYzAoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCXJldHVybiBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzEsIF9jb29yZHMpLjAwMHI7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxX2MxKGhhbGY0IF9pbnB1dCwgZmxvYXQyIF9jb29yZHMpIAp7CglyZXR1cm4gVGV4dHVyZUVmZmVjdF9TMV9jMV9jMChfaW5wdXQsIGZsb2F0M3gyKHVtYXRyaXhfUzFfYzEpICogX2Nvb3Jkcy54eTEpOwp9CmhhbGY0IERpdGhlcl9TMShoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzZfaW5Db2xvciA9IF9pbnB1dDsKCWhhbGY0IGNvbG9yID0gRGlzYWJsZUNvdmVyYWdlQXNBbHBoYV9TMV9jMChfdG1wXzZfaW5Db2xvcik7CgloYWxmIHZhbHVlID0gTWF0cml4RWZmZWN0X1MxX2MxKF90bXBfNl9pbkNvbG9yLCBza19GcmFnQ29vcmQueHkpLncgLSAwLjU7CglyZXR1cm4gaGFsZjQoaGFsZjQoY2xhbXAoY29sb3IueHl6ICsgdmFsdWUgKiB1cmFuZ2VfUzEsIDAuMCwgY29sb3IudyksIGNvbG9yLncpKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IERpdGhlcl9TMShvdXRwdXRDb2xvcl9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAcG9zaXRpb24FAAAAY29sb3IAAAAKAAAAbG9jYWxDb29yZAAAAAAAAA==","GYJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGAAZAABQAAAAAAAACAAAAADYCAAIAAAAAIBRAAAABAAAAALIEIQCAAAAAAAAAAAAAGABQAAAAEAAAAAAAEEBQAAAA":"DAAAAExTS1PSAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzA7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQyIGxvY2FsQ29vcmQ7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2bG9jYWxDb29yZF9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc180X1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCXZsb2NhbENvb3JkX1MwID0gbG9jYWxDb29yZDsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfNF9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzFfYzBfYzApICogcG9zaXRpb24ueHkxOwoJfQp9CgAAAAAAACUEAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxX2MwX2MwOwpzYW1wbGVyMkQgdVRleHR1cmVTYW1wbGVyXzBfUzA7CnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMTsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc180X1MwOwpoYWxmNCBUZXh0dXJlRWZmZWN0X1MxX2MwX2MwX2MwKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzEsIHZUcmFuc2Zvcm1lZENvb3Jkc180X1MwKS4wMDByOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMV9jMF9jMChoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gVGV4dHVyZUVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQpOwp9CmhhbGY0IERldmljZVNwYWNlX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX2lucHV0KTsKfQpoYWxmNCBCbGVuZF9TMShoYWxmNCBfc3JjLCBoYWxmNCBfZHN0KSAKewoJcmV0dXJuIGJsZW5kX2RzdF9pbihEZXZpY2VTcGFjZV9TMV9jMChfc3JjKSwgX3NyYyk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzAgPSBoYWxmNCgxKTsKCWZsb2F0MiB0ZXhDb29yZDsKCXRleENvb3JkID0gdmxvY2FsQ29vcmRfUzA7CglvdXRwdXRDb2xvcl9TMCA9IChibGVuZF9tb2R1bGF0ZShzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzAsIHRleENvb3JkKSwgaGFsZjQoMSkpKTsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBCbGVuZF9TMShvdXRwdXRDb3ZlcmFnZV9TMCwgaGFsZjQoMSkpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0X1MxOwoJfQp9CgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAHBvc2l0aW9uCgAAAGxvY2FsQ29vcmQAAAAAAAA=","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJQBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAAJQAAAAAAAANAAAAAHQVERARJYAAAABQAAAABAAAAAA4BAQAAACAAAAASAMAAQAAAAAUCCYBCAAAAAAAAAAAAAANJABAAAMBJ4KECOAEAAAMAAAAAAAAEAABAAV6GUSECFHAAAAAGAAAAAAAAAAAAAGABQAAAAEAAAAAAAEEBQA":"DAAAAExTS1PdAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMl9jMF9jMDsKaW4gZmxvYXQyIHBvc2l0aW9uOwppbiBmbG9hdCBjb3ZlcmFnZTsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0IHZjb3ZlcmFnZV9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzZfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwoJewoJCXZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwID0gZmxvYXQzeDIodW1hdHJpeF9TMSkgKiBsb2NhbENvb3JkLnh5MTsKCX0KCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfNl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzJfYzBfYzApICogcG9zaXRpb24ueHkxOwoJfQp9CgAAAAEAAADvIQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCmZsb2F0NCBmbHV0dGVyX0ZyYWdDb29yZF9TMV9jMDsKZmxvYXQ0IGZyYWdDb2xvcl9TMV9jMDsKZmxvYXQgdV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9zcGFya2xlX2FscGhhX1MxX2MwOwpmbG9hdCB1X2JsdXJfUzFfYzA7CmZsb2F0IHVfcmFkaXVzX3NjYWxlX1MxX2MwOwpjb25zdCBpbnQga0ZpbGxCV19TMl9jMV9jMCA9IDA7CmNvbnN0IGludCBrSW52ZXJzZUZpbGxCV19TMl9jMV9jMCA9IDI7CmNvbnN0IGludCBrSW52ZXJzZUZpbGxBQV9TMl9jMV9jMCA9IDM7CnVuaWZvcm0gZmxvYXQ0IHVfY29sb3JfUzFfYzA7CnVuaWZvcm0gZmxvYXQ0IHVfY29tcG9zaXRlXzFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2VudGVyX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVfbWF4X3JhZGl1c19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yZXNvbHV0aW9uX3NjYWxlX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X25vaXNlX3NjYWxlX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVfbm9pc2VfcGhhc2VfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUyX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24xX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uMl9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjNfUzFfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MyX2MwX2MwOwp1bmlmb3JtIGZsb2F0NCB1cmVjdFVuaWZvcm1fUzJfYzFfYzA7CnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMjsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzZfUzA7CmZsb2F0MiBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCk7CmZsb2F0MngyIEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKGZsb2F0MiByYWQpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCBibHVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAoZmxvYXQyIHJlc29sdXRpb24sIGlub3V0IGZsb2F0MiBwLCBmbG9hdDIgeHksIGZsb2F0MiByb3RhdGlvbiwgZmxvYXQgY2VsbF9kaWFtZXRlcik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAoZmxvYXQyIHV2KTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgYmx1cik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKGlub3V0IGZsb2F0MiBuKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKGZsb2F0IHYsIGZsb2F0IGwsIGZsb2F0IGgpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQgdCk7CnZvaWQgRkxUX21haW5fUzFfYzAoKTsKZmxvYXQyIEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKSAKewoJcmV0dXJuIGZsdXR0ZXJfRnJhZ0Nvb3JkX1MxX2MwLnh5Owp9CmZsb2F0MngyIEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKGZsb2F0MiByYWQpIAp7CglyZXR1cm4gZmxvYXQyeDIocmFkLngsIC1yYWQueSwgcmFkLnksIHJhZC54KTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCBibHVyKSAKewoJZmxvYXQgYmx1cl9oYWxmID0gYmx1ciAqIDAuNTsKCWZsb2F0IGQgPSBkaXN0YW5jZSh1diwgeHkpOwoJcmV0dXJuIDEuMCAtIHNtb290aHN0ZXAoMS4wIC0gYmx1cl9oYWxmLCAxLjAgKyBibHVyX2hhbGYsIGQgLyByYWRpdXMpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKGZsb2F0MiByZXNvbHV0aW9uLCBpbm91dCBmbG9hdDIgcCwgZmxvYXQyIHh5LCBmbG9hdDIgcm90YXRpb24sIGZsb2F0IGNlbGxfZGlhbWV0ZXIpIAp7CglmbG9hdDIgcGFyYW0gPSByb3RhdGlvbjsKCXAgPSBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChwYXJhbSkgKiAoeHkgLSBwKSArIHh5OwoJcCA9IG1vZChwLCBmbG9hdDIoY2VsbF9kaWFtZXRlcikpIC8gcmVzb2x1dGlvbjsKCWZsb2F0IGNlbGxfdXYgPSAoY2VsbF9kaWFtZXRlciAvIHJlc29sdXRpb24ueSkgKiAwLjU7CglmbG9hdCByID0gMC42NSAqIGNlbGxfdXY7CglmbG9hdDIgcGFyYW1fMSA9IHA7CglmbG9hdDIgcGFyYW1fMiA9IGZsb2F0MihjZWxsX3V2KTsKCWZsb2F0IHBhcmFtXzMgPSByOwoJZmxvYXQgcGFyYW1fNCA9IHIgKiA1MC4wOwoJcmV0dXJuIEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMsIHBhcmFtXzQpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAoZmxvYXQyIHV2KSAKewoJZmxvYXQyIHV2X3NjYWxlID0gdXYgKiBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbSA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzEgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV8yID0gdV9jaXJjbGUxX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzMgPSB1X3JvdGF0aW9uMV9TMV9jMDsKCWZsb2F0IHBhcmFtXzQgPSAwLjE3OwoJZmxvYXQgXzMxOSA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtLCBwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zLCBwYXJhbV80KTsKCWZsb2F0IGcxID0gXzMxOTsKCWZsb2F0MiBwYXJhbV81ID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fNiA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzcgPSB1X2NpcmNsZTJfUzFfYzA7CglmbG9hdDIgcGFyYW1fOCA9IHVfcm90YXRpb24yX1MxX2MwOwoJZmxvYXQgcGFyYW1fOSA9IDAuMjsKCWZsb2F0IF8zMzEgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbV81LCBwYXJhbV82LCBwYXJhbV83LCBwYXJhbV84LCBwYXJhbV85KTsKCWZsb2F0IGcyID0gXzMzMTsKCWZsb2F0MiBwYXJhbV8xMCA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzExID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fMTIgPSB1X2NpcmNsZTNfUzFfYzA7CglmbG9hdDIgcGFyYW1fMTMgPSB1X3JvdGF0aW9uM19TMV9jMDsKCWZsb2F0IHBhcmFtXzE0ID0gMC4yNzU7CglmbG9hdCBfMzQ0ID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW1fMTAsIHBhcmFtXzExLCBwYXJhbV8xMiwgcGFyYW1fMTMsIHBhcmFtXzE0KTsKCWZsb2F0IGczID0gXzM0NDsKCWZsb2F0IHYgPSAoKGcxICogZzEgKyBnMikgLSBnMykgKiAwLjU7CglyZXR1cm4gY2xhbXAoMC40NSArIDAuOCAqIHYsIDAuMCwgMS4wKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBibHVyKSAKewoJZmxvYXQyIHBhcmFtID0gdXY7CglmbG9hdDIgcGFyYW1fMSA9IHh5OwoJZmxvYXQgcGFyYW1fMiA9IHJhZGl1cyArIHRoaWNrbmVzczsKCWZsb2F0IHBhcmFtXzMgPSBibHVyOwoJZmxvYXQgY2lyY2xlX291dGVyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW0sIHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMpOwoJZmxvYXQyIHBhcmFtXzQgPSB1djsKCWZsb2F0MiBwYXJhbV81ID0geHk7CglmbG9hdCBwYXJhbV82ID0gbWF4KHJhZGl1cyAtIHRoaWNrbmVzcywgMC4wKTsKCWZsb2F0IHBhcmFtXzcgPSBibHVyOwoJZmxvYXQgY2lyY2xlX2lubmVyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fNCwgcGFyYW1fNSwgcGFyYW1fNiwgcGFyYW1fNyk7CglyZXR1cm4gY2xhbXAoY2lyY2xlX291dGVyIC0gY2lyY2xlX2lubmVyLCAwLjAsIDEuMCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAoaW5vdXQgZmxvYXQyIG4pIAp7CgluID0gZnJhY3QobiAqIGZsb2F0Mig1LjM5ODcsIDUuNDQyMSkpOwoJbiArPSBmbG9hdDIoZG90KG4ueXgsIG4gKyBmbG9hdDIoMjEuNTM1MSwgMTQuMzEzNykpKTsKCWZsb2F0IHh5ID0gbi54ICogbi55OwoJcmV0dXJuIChmcmFjdCh4eSAqIDk1LjQzMDcpICsgZnJhY3QoeHkgKiA3NS4wNDk2MSkpIC0gMS4wOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChmbG9hdCB2LCBmbG9hdCBsLCBmbG9hdCBoKSAKewoJcmV0dXJuIHN0ZXAobCwgdikgKiAoMS4wIC0gc3RlcChoLCB2KSk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0IHQpIAp7CglmbG9hdDIgcGFyYW0gPSB1djsKCWZsb2F0IF8yNDIgPSBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChwYXJhbSk7CglmbG9hdCBuID0gXzI0MjsKCWZsb2F0IHBhcmFtXzEgPSBuOwoJZmxvYXQgcGFyYW1fMiA9IDAuMDsKCWZsb2F0IHBhcmFtXzMgPSAwLjA1OwoJZmxvYXQgcyA9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zKTsKCWZsb2F0IHBhcmFtXzQgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDAuMzUpKTsKCWZsb2F0IHBhcmFtXzUgPSAwLjE7CglmbG9hdCBwYXJhbV82ID0gMC4xNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzQsIHBhcmFtXzUsIHBhcmFtXzYpOwoJZmxvYXQgcGFyYW1fNyA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMC43KSk7CglmbG9hdCBwYXJhbV84ID0gMC4yOwoJZmxvYXQgcGFyYW1fOSA9IDAuMjU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV83LCBwYXJhbV84LCBwYXJhbV85KTsKCWZsb2F0IHBhcmFtXzEwID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAxLjA1KSk7CglmbG9hdCBwYXJhbV8xMSA9IDAuMzsKCWZsb2F0IHBhcmFtXzEyID0gMC4zNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzEwLCBwYXJhbV8xMSwgcGFyYW1fMTIpOwoJcmV0dXJuIGNsYW1wKHMsIDAuMCwgMS4wKSAqIDAuNTU7Cn0Kdm9pZCBGTFRfbWFpbl9TMV9jMCgpIAp7Cgl1X2FscGhhX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC54OwoJdV9zcGFya2xlX2FscGhhX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC55OwoJdV9ibHVyX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC56OwoJdV9yYWRpdXNfc2NhbGVfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLnc7CglmbG9hdDIgcCA9IEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKTsKCWZsb2F0MiB1dl8xID0gcCAqIHVfcmVzb2x1dGlvbl9zY2FsZV9TMV9jMDsKCWZsb2F0MiBkZW5zaXR5X3V2ID0gdXZfMSAtIG1vZChwLCB1X25vaXNlX3NjYWxlX1MxX2MwKTsKCWZsb2F0IHJhZGl1cyA9IHVfbWF4X3JhZGl1c19TMV9jMCAqIHVfcmFkaXVzX3NjYWxlX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzEzID0gdXZfMTsKCWZsb2F0IHR1cmJ1bGVuY2UgPSBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKHBhcmFtXzEzKTsKCWZsb2F0MiBwYXJhbV8xNCA9IHA7CglmbG9hdDIgcGFyYW1fMTUgPSB1X2NlbnRlcl9TMV9jMDsKCWZsb2F0IHBhcmFtXzE2ID0gcmFkaXVzOwoJZmxvYXQgcGFyYW1fMTcgPSAwLjA1ICogdV9tYXhfcmFkaXVzX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTggPSB1X2JsdXJfUzFfYzA7CglmbG9hdCByaW5nID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKHBhcmFtXzE0LCBwYXJhbV8xNSwgcGFyYW1fMTYsIHBhcmFtXzE3LCBwYXJhbV8xOCk7CglmbG9hdDIgcGFyYW1fMTkgPSBkZW5zaXR5X3V2OwoJZmxvYXQgcGFyYW1fMjAgPSB1X25vaXNlX3BoYXNlX1MxX2MwOwoJZmxvYXQgc3BhcmtsZSA9ICgoRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChwYXJhbV8xOSwgcGFyYW1fMjApICogcmluZykgKiB0dXJidWxlbmNlKSAqIHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8yMSA9IHA7CglmbG9hdDIgcGFyYW1fMjIgPSB1X2NlbnRlcl9TMV9jMDsKCWZsb2F0IHBhcmFtXzIzID0gcmFkaXVzOwoJZmxvYXQgcGFyYW1fMjQgPSB1X2JsdXJfUzFfYzA7CglmbG9hdCB3YXZlX2FscGhhID0gKEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzIxLCBwYXJhbV8yMiwgcGFyYW1fMjMsIHBhcmFtXzI0KSAqIHVfYWxwaGFfUzFfYzApICogdV9jb2xvcl9TMV9jMC53OwoJZmxvYXQ0IHdhdmVfY29sb3IgPSBmbG9hdDQodV9jb2xvcl9TMV9jMC54eXogKiB3YXZlX2FscGhhLCB3YXZlX2FscGhhKTsKCWZyYWdDb2xvcl9TMV9jMCA9IG1peCh3YXZlX2NvbG9yLCBmbG9hdDQoMS4wKSwgZmxvYXQ0KHNwYXJrbGUpKTsKfQpoYWxmNCBydW50aW1lX3NoYWRlcl9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzFfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CglmbHV0dGVyX0ZyYWdDb29yZF9TMV9jMCA9IGZsb2F0NChfdG1wXzFfY29vcmRzLCAwLjAsIDAuMCk7CglGTFRfbWFpbl9TMV9jMCgpOwoJcmV0dXJuIGhhbGY0KGhhbGY0KGZyYWdDb2xvcl9TMV9jMCkpOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gcnVudGltZV9zaGFkZXJfUzFfYzAoX2lucHV0KTsKfQpoYWxmNCBUZXh0dXJlRWZmZWN0X1MyX2MwX2MwX2MwKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzIsIHZUcmFuc2Zvcm1lZENvb3Jkc182X1MwKS4wMDByOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMl9jMF9jMChoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gVGV4dHVyZUVmZmVjdF9TMl9jMF9jMF9jMChfaW5wdXQpOwp9CmhhbGY0IERldmljZVNwYWNlX1MyX2MwKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBNYXRyaXhFZmZlY3RfUzJfYzBfYzAoX2lucHV0KTsKfQpoYWxmNCBSZWN0X1MyX2MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMl9pbkNvbG9yID0gX2lucHV0OwoJaGFsZiBjb3ZlcmFnZTsKCWlmIChpbnQoMSkgPT0ga0ZpbGxCV19TMl9jMV9jMCB8fCBpbnQoMSkgPT0ga0ludmVyc2VGaWxsQldfUzJfYzFfYzApIAoJewoJCWNvdmVyYWdlID0gaGFsZihhbGwoZ3JlYXRlclRoYW4oZmxvYXQ0KHNrX0ZyYWdDb29yZC54eSwgdXJlY3RVbmlmb3JtX1MyX2MxX2MwLnp3KSwgZmxvYXQ0KHVyZWN0VW5pZm9ybV9TMl9jMV9jMC54eSwgc2tfRnJhZ0Nvb3JkLnh5KSkpKTsKCX0KCWVsc2UgCgl7CgkJaGFsZjQgZGlzdHM0ID0gc2F0dXJhdGUoaGFsZjQoMS4wLCAxLjAsIC0xLjAsIC0xLjApICogaGFsZjQoc2tfRnJhZ0Nvb3JkLnh5eHkgLSB1cmVjdFVuaWZvcm1fUzJfYzFfYzApKTsKCQloYWxmMiBkaXN0czIgPSAoZGlzdHM0Lnh5ICsgZGlzdHM0Lnp3KSAtIDEuMDsKCQljb3ZlcmFnZSA9IGRpc3RzMi54ICogZGlzdHMyLnk7Cgl9CglpZiAoaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MyX2MxX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMl9jMV9jMCkgCgl7CgkJY292ZXJhZ2UgPSAxLjAgLSBjb3ZlcmFnZTsKCX0KCXJldHVybiBoYWxmNChoYWxmNChjb3ZlcmFnZSkpOwp9CmhhbGY0IEJsZW5kX1MyX2MxKGhhbGY0IF9zcmMsIGhhbGY0IF9kc3QpIAp7CglyZXR1cm4gYmxlbmRfbW9kdWxhdGUoUmVjdF9TMl9jMV9jMChfc3JjKSwgX3NyYyk7Cn0KaGFsZjQgQmxlbmRfUzIoaGFsZjQgX3NyYywgaGFsZjQgX2RzdCkgCnsKCXJldHVybiBibGVuZF9kc3RfaW4oRGV2aWNlU3BhY2VfUzJfYzAoX3NyYyksIEJsZW5kX1MyX2MxKF9zcmMsIF9kc3QpKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgY292ZXJhZ2UgPSB2Y292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGNvdmVyYWdlKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb2xvcl9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBCbGVuZF9TMihvdXRwdXRDb3ZlcmFnZV9TMCwgaGFsZjQoMSkpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dF9TMjsKCX0KfQoAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAcG9zaXRpb24IAAAAY292ZXJhZ2UFAAAAY29sb3IAAAAKAAAAbG9jYWxDb29yZAAAAAAAAA==","FIMAAAYAAEHAAAARC4EAAAQWBQAAAAAAAAAQAAAAIBCAAAEYAEAAAAAQAAAABAEQAEAAAAA":"DAAAAExTS1OtAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKaW4gaGFsZjMgaW5TaGFkb3dQYXJhbXM7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGYzIHZpblNoYWRvd1BhcmFtc19TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFJSZWN0U2hhZG93Cgl2aW5TaGFkb3dQYXJhbXNfUzAgPSBpblNoYWRvd1BhcmFtczsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzBfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cglza19Qb3NpdGlvbiA9IF90bXBfMF9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAAFwCAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwpub3BlcnNwZWN0aXZlIGluIGhhbGYzIHZpblNoYWRvd1BhcmFtc19TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFJSZWN0U2hhZG93CgloYWxmMyBzaGFkb3dQYXJhbXM7CglzaGFkb3dQYXJhbXMgPSB2aW5TaGFkb3dQYXJhbXNfUzA7CgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmluQ29sb3JfUzA7CgloYWxmIGQgPSBsZW5ndGgoc2hhZG93UGFyYW1zLnh5KTsKCWZsb2F0MiB1diA9IGZsb2F0MihzaGFkb3dQYXJhbXMueiAqICgxLjAgLSBkKSwgMC41KTsKCWhhbGYgZmFjdG9yID0gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB1dikuMDAwci5hOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChmYWN0b3IpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADgAAAGluU2hhZG93UGFyYW1zAAAAAAAA","G2QACAAAABAAADAAAIOAAAAADIIAAIRODAAP577774DSAIAA737777YBAAAAAAAAAAADAAYAAAACAAAAAAACCAYAAA":"DAAAAExTS1PqAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0IGNvdmVyYWdlOwppbiBoYWxmNCBjb2xvcjsKaW4gZmxvYXQ0IGdlb21TdWJzZXQ7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmdlb21TdWJzZXRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJdmdlb21TdWJzZXRfUzAgPSBnZW9tU3Vic2V0OwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAQAAAKQCAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0NCB2Z2VvbVN1YnNldF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJZmxvYXQ0IGdlb1N1YnNldDsKCWdlb1N1YnNldCA9IHZnZW9tU3Vic2V0X1MwOwoJZmxvYXQ0IGRpc3RzNCA9IHNhdHVyYXRlKGZsb2F0NCgxLCAxLCAtMSwgLTEpICogKHNrX0ZyYWdDb29yZC54eXh5IC0gZ2VvU3Vic2V0KSk7CglmbG9hdDIgZGlzdHMyID0gZGlzdHM0Lnh5ICsgZGlzdHM0Lnp3IC0gMTsKCWNvdmVyYWdlID0gbWluKGNvdmVyYWdlLCBkaXN0czIueCAqIGRpc3RzMi55KTsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoY292ZXJhZ2UpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAcG9zaXRpb24IAAAAY292ZXJhZ2UFAAAAY29sb3IAAAAKAAAAZ2VvbVN1YnNldAAAAAAAAA==","AYQA5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAAAAB3QA6AAAEAAAAAAAMAAPEAEAAABAAAAAABTAAAAAAACAAAAAEBSAAAA":"DAAAAExTS1MlAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0NCB1bG9jYWxNYXRyaXhfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBmbG9hdDQgaW5DaXJjbGVFZGdlOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCgl2aW5DaXJjbGVFZGdlX1MwID0gaW5DaXJjbGVFZGdlOwoJdmluQ29sb3JfUzAgPSBpbkNvbG9yOwoJZmxvYXQyIF90bXBfMF9pblBvc2l0aW9uID0gaW5Qb3NpdGlvbjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IHVsb2NhbE1hdHJpeF9TMC54eiAqIGluUG9zaXRpb24gKyB1bG9jYWxNYXRyaXhfUzAueXc7Cglza19Qb3NpdGlvbiA9IF90bXBfMF9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAQAAAHcFAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMTsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzE7CnVuaWZvcm0gZmxvYXQ0IHVpbm5lclJlY3RfUzI7CnVuaWZvcm0gaGFsZjIgdXJhZGl1c1BsdXNIYWxmX1MyOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0NCB2aW5DaXJjbGVFZGdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZpbkNvbG9yX1MwOwpoYWxmNCBDaXJjdWxhclJSZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCWZsb2F0MiBkeHkwID0gdWlubmVyUmVjdF9TMS5MVCAtIHNrX0ZyYWdDb29yZC54eTsKCWZsb2F0MiBkeHkxID0gc2tfRnJhZ0Nvb3JkLnh5IC0gdWlubmVyUmVjdF9TMS5SQjsKCWZsb2F0MiBkeHkgPSBtYXgobWF4KGR4eTAsIGR4eTEpLCAwLjApOwoJaGFsZiBhbHBoYSA9IGhhbGYoc2F0dXJhdGUodXJhZGl1c1BsdXNIYWxmX1MxLnggLSBsZW5ndGgoZHh5KSkpOwoJYWxwaGEgPSAxLjAgLSBhbHBoYTsKCXJldHVybiBfaW5wdXQgKiBhbHBoYTsKfQpoYWxmNCBDaXJjdWxhclJSZWN0X1MyKGhhbGY0IF9pbnB1dCkgCnsKCWZsb2F0MiBkeHkwID0gdWlubmVyUmVjdF9TMi5MVCAtIHNrX0ZyYWdDb29yZC54eTsKCWZsb2F0MiBkeHkxID0gc2tfRnJhZ0Nvb3JkLnh5IC0gdWlubmVyUmVjdF9TMi5SQjsKCWZsb2F0MiBkeHkgPSBtYXgobWF4KGR4eTAsIGR4eTEpLCAwLjApOwoJaGFsZiBhbHBoYSA9IGhhbGYoc2F0dXJhdGUodXJhZGl1c1BsdXNIYWxmX1MyLnggLSBsZW5ndGgoZHh5KSkpOwoJcmV0dXJuIF9pbnB1dCAqIGFscGhhOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQ0IGNpcmNsZUVkZ2U7CgljaXJjbGVFZGdlID0gdmluQ2lyY2xlRWRnZV9TMDsKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWZsb2F0IGQgPSBsZW5ndGgoY2lyY2xlRWRnZS54eSk7CgloYWxmIGRpc3RhbmNlVG9PdXRlckVkZ2UgPSBoYWxmKGNpcmNsZUVkZ2UueiAqICgxLjAgLSBkKSk7CgloYWxmIGVkZ2VBbHBoYSA9IHNhdHVyYXRlKGRpc3RhbmNlVG9PdXRlckVkZ2UpOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChlZGdlQWxwaGEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQ2lyY3VsYXJSUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBDaXJjdWxhclJSZWN0X1MyKG91dHB1dF9TMSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzI7Cgl9Cn0KAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACgAAAGluUG9zaXRpb24AAAcAAABpbkNvbG9yAAwAAABpbkNpcmNsZUVkZ2UAAAAA","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJQBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAALIAAAAB4FJEIEKOAAAAAMAAAAAEAHQAACAAAAAAYCFPSVARQRJAAAAABQAAAAAAAAAAA4JAPAAACAAAAAAACABSAAAAAAACAAAAAEBSAAA":"DAAAAExTS1M7AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgABAAAANCEAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpmbG9hdDQgZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzA7CmZsb2F0NCBmcmFnQ29sb3JfUzFfYzA7CmZsb2F0IHVfYWxwaGFfUzFfYzA7CmZsb2F0IHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9ibHVyX1MxX2MwOwpmbG9hdCB1X3JhZGl1c19zY2FsZV9TMV9jMDsKY29uc3QgaW50IGtGaWxsQldfUzJfYzAgPSAwOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzJfYzAgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzJfYzAgPSAzOwp1bmlmb3JtIGZsb2F0NCB1X2NvbG9yX1MxX2MwOwp1bmlmb3JtIGZsb2F0NCB1X2NvbXBvc2l0ZV8xX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NlbnRlcl9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1X21heF9yYWRpdXNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcmVzb2x1dGlvbl9zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9ub2lzZV9zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdCB1X25vaXNlX3BoYXNlX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlMl9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24zX1MxX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CnVuaWZvcm0gZmxvYXQ0IHVyZWN0VW5pZm9ybV9TMl9jMDsKdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMl9jMTsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzJfYzE7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0IHZjb3ZlcmFnZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CmZsb2F0MiBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCk7CmZsb2F0MngyIEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKGZsb2F0MiByYWQpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCBibHVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAoZmxvYXQyIHJlc29sdXRpb24sIGlub3V0IGZsb2F0MiBwLCBmbG9hdDIgeHksIGZsb2F0MiByb3RhdGlvbiwgZmxvYXQgY2VsbF9kaWFtZXRlcik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAoZmxvYXQyIHV2KTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgYmx1cik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKGlub3V0IGZsb2F0MiBuKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKGZsb2F0IHYsIGZsb2F0IGwsIGZsb2F0IGgpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQgdCk7CnZvaWQgRkxUX21haW5fUzFfYzAoKTsKZmxvYXQyIEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKSAKewoJcmV0dXJuIGZsdXR0ZXJfRnJhZ0Nvb3JkX1MxX2MwLnh5Owp9CmZsb2F0MngyIEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKGZsb2F0MiByYWQpIAp7CglyZXR1cm4gZmxvYXQyeDIocmFkLngsIC1yYWQueSwgcmFkLnksIHJhZC54KTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCBibHVyKSAKewoJZmxvYXQgYmx1cl9oYWxmID0gYmx1ciAqIDAuNTsKCWZsb2F0IGQgPSBkaXN0YW5jZSh1diwgeHkpOwoJcmV0dXJuIDEuMCAtIHNtb290aHN0ZXAoMS4wIC0gYmx1cl9oYWxmLCAxLjAgKyBibHVyX2hhbGYsIGQgLyByYWRpdXMpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKGZsb2F0MiByZXNvbHV0aW9uLCBpbm91dCBmbG9hdDIgcCwgZmxvYXQyIHh5LCBmbG9hdDIgcm90YXRpb24sIGZsb2F0IGNlbGxfZGlhbWV0ZXIpIAp7CglmbG9hdDIgcGFyYW0gPSByb3RhdGlvbjsKCXAgPSBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChwYXJhbSkgKiAoeHkgLSBwKSArIHh5OwoJcCA9IG1vZChwLCBmbG9hdDIoY2VsbF9kaWFtZXRlcikpIC8gcmVzb2x1dGlvbjsKCWZsb2F0IGNlbGxfdXYgPSAoY2VsbF9kaWFtZXRlciAvIHJlc29sdXRpb24ueSkgKiAwLjU7CglmbG9hdCByID0gMC42NSAqIGNlbGxfdXY7CglmbG9hdDIgcGFyYW1fMSA9IHA7CglmbG9hdDIgcGFyYW1fMiA9IGZsb2F0MihjZWxsX3V2KTsKCWZsb2F0IHBhcmFtXzMgPSByOwoJZmxvYXQgcGFyYW1fNCA9IHIgKiA1MC4wOwoJcmV0dXJuIEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMsIHBhcmFtXzQpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAoZmxvYXQyIHV2KSAKewoJZmxvYXQyIHV2X3NjYWxlID0gdXYgKiBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbSA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzEgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV8yID0gdV9jaXJjbGUxX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzMgPSB1X3JvdGF0aW9uMV9TMV9jMDsKCWZsb2F0IHBhcmFtXzQgPSAwLjE3OwoJZmxvYXQgXzMxOSA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtLCBwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zLCBwYXJhbV80KTsKCWZsb2F0IGcxID0gXzMxOTsKCWZsb2F0MiBwYXJhbV81ID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fNiA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzcgPSB1X2NpcmNsZTJfUzFfYzA7CglmbG9hdDIgcGFyYW1fOCA9IHVfcm90YXRpb24yX1MxX2MwOwoJZmxvYXQgcGFyYW1fOSA9IDAuMjsKCWZsb2F0IF8zMzEgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbV81LCBwYXJhbV82LCBwYXJhbV83LCBwYXJhbV84LCBwYXJhbV85KTsKCWZsb2F0IGcyID0gXzMzMTsKCWZsb2F0MiBwYXJhbV8xMCA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzExID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fMTIgPSB1X2NpcmNsZTNfUzFfYzA7CglmbG9hdDIgcGFyYW1fMTMgPSB1X3JvdGF0aW9uM19TMV9jMDsKCWZsb2F0IHBhcmFtXzE0ID0gMC4yNzU7CglmbG9hdCBfMzQ0ID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW1fMTAsIHBhcmFtXzExLCBwYXJhbV8xMiwgcGFyYW1fMTMsIHBhcmFtXzE0KTsKCWZsb2F0IGczID0gXzM0NDsKCWZsb2F0IHYgPSAoKGcxICogZzEgKyBnMikgLSBnMykgKiAwLjU7CglyZXR1cm4gY2xhbXAoMC40NSArIDAuOCAqIHYsIDAuMCwgMS4wKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBibHVyKSAKewoJZmxvYXQyIHBhcmFtID0gdXY7CglmbG9hdDIgcGFyYW1fMSA9IHh5OwoJZmxvYXQgcGFyYW1fMiA9IHJhZGl1cyArIHRoaWNrbmVzczsKCWZsb2F0IHBhcmFtXzMgPSBibHVyOwoJZmxvYXQgY2lyY2xlX291dGVyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW0sIHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMpOwoJZmxvYXQyIHBhcmFtXzQgPSB1djsKCWZsb2F0MiBwYXJhbV81ID0geHk7CglmbG9hdCBwYXJhbV82ID0gbWF4KHJhZGl1cyAtIHRoaWNrbmVzcywgMC4wKTsKCWZsb2F0IHBhcmFtXzcgPSBibHVyOwoJZmxvYXQgY2lyY2xlX2lubmVyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fNCwgcGFyYW1fNSwgcGFyYW1fNiwgcGFyYW1fNyk7CglyZXR1cm4gY2xhbXAoY2lyY2xlX291dGVyIC0gY2lyY2xlX2lubmVyLCAwLjAsIDEuMCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAoaW5vdXQgZmxvYXQyIG4pIAp7CgluID0gZnJhY3QobiAqIGZsb2F0Mig1LjM5ODcsIDUuNDQyMSkpOwoJbiArPSBmbG9hdDIoZG90KG4ueXgsIG4gKyBmbG9hdDIoMjEuNTM1MSwgMTQuMzEzNykpKTsKCWZsb2F0IHh5ID0gbi54ICogbi55OwoJcmV0dXJuIChmcmFjdCh4eSAqIDk1LjQzMDcpICsgZnJhY3QoeHkgKiA3NS4wNDk2MSkpIC0gMS4wOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChmbG9hdCB2LCBmbG9hdCBsLCBmbG9hdCBoKSAKewoJcmV0dXJuIHN0ZXAobCwgdikgKiAoMS4wIC0gc3RlcChoLCB2KSk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0IHQpIAp7CglmbG9hdDIgcGFyYW0gPSB1djsKCWZsb2F0IF8yNDIgPSBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChwYXJhbSk7CglmbG9hdCBuID0gXzI0MjsKCWZsb2F0IHBhcmFtXzEgPSBuOwoJZmxvYXQgcGFyYW1fMiA9IDAuMDsKCWZsb2F0IHBhcmFtXzMgPSAwLjA1OwoJZmxvYXQgcyA9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zKTsKCWZsb2F0IHBhcmFtXzQgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDAuMzUpKTsKCWZsb2F0IHBhcmFtXzUgPSAwLjE7CglmbG9hdCBwYXJhbV82ID0gMC4xNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzQsIHBhcmFtXzUsIHBhcmFtXzYpOwoJZmxvYXQgcGFyYW1fNyA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMC43KSk7CglmbG9hdCBwYXJhbV84ID0gMC4yOwoJZmxvYXQgcGFyYW1fOSA9IDAuMjU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV83LCBwYXJhbV84LCBwYXJhbV85KTsKCWZsb2F0IHBhcmFtXzEwID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAxLjA1KSk7CglmbG9hdCBwYXJhbV8xMSA9IDAuMzsKCWZsb2F0IHBhcmFtXzEyID0gMC4zNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzEwLCBwYXJhbV8xMSwgcGFyYW1fMTIpOwoJcmV0dXJuIGNsYW1wKHMsIDAuMCwgMS4wKSAqIDAuNTU7Cn0Kdm9pZCBGTFRfbWFpbl9TMV9jMCgpIAp7Cgl1X2FscGhhX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC54OwoJdV9zcGFya2xlX2FscGhhX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC55OwoJdV9ibHVyX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC56OwoJdV9yYWRpdXNfc2NhbGVfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLnc7CglmbG9hdDIgcCA9IEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKTsKCWZsb2F0MiB1dl8xID0gcCAqIHVfcmVzb2x1dGlvbl9zY2FsZV9TMV9jMDsKCWZsb2F0MiBkZW5zaXR5X3V2ID0gdXZfMSAtIG1vZChwLCB1X25vaXNlX3NjYWxlX1MxX2MwKTsKCWZsb2F0IHJhZGl1cyA9IHVfbWF4X3JhZGl1c19TMV9jMCAqIHVfcmFkaXVzX3NjYWxlX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzEzID0gdXZfMTsKCWZsb2F0IHR1cmJ1bGVuY2UgPSBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKHBhcmFtXzEzKTsKCWZsb2F0MiBwYXJhbV8xNCA9IHA7CglmbG9hdDIgcGFyYW1fMTUgPSB1X2NlbnRlcl9TMV9jMDsKCWZsb2F0IHBhcmFtXzE2ID0gcmFkaXVzOwoJZmxvYXQgcGFyYW1fMTcgPSAwLjA1ICogdV9tYXhfcmFkaXVzX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTggPSB1X2JsdXJfUzFfYzA7CglmbG9hdCByaW5nID0gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKHBhcmFtXzE0LCBwYXJhbV8xNSwgcGFyYW1fMTYsIHBhcmFtXzE3LCBwYXJhbV8xOCk7CglmbG9hdDIgcGFyYW1fMTkgPSBkZW5zaXR5X3V2OwoJZmxvYXQgcGFyYW1fMjAgPSB1X25vaXNlX3BoYXNlX1MxX2MwOwoJZmxvYXQgc3BhcmtsZSA9ICgoRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChwYXJhbV8xOSwgcGFyYW1fMjApICogcmluZykgKiB0dXJidWxlbmNlKSAqIHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8yMSA9IHA7CglmbG9hdDIgcGFyYW1fMjIgPSB1X2NlbnRlcl9TMV9jMDsKCWZsb2F0IHBhcmFtXzIzID0gcmFkaXVzOwoJZmxvYXQgcGFyYW1fMjQgPSB1X2JsdXJfUzFfYzA7CglmbG9hdCB3YXZlX2FscGhhID0gKEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzIxLCBwYXJhbV8yMiwgcGFyYW1fMjMsIHBhcmFtXzI0KSAqIHVfYWxwaGFfUzFfYzApICogdV9jb2xvcl9TMV9jMC53OwoJZmxvYXQ0IHdhdmVfY29sb3IgPSBmbG9hdDQodV9jb2xvcl9TMV9jMC54eXogKiB3YXZlX2FscGhhLCB3YXZlX2FscGhhKTsKCWZyYWdDb2xvcl9TMV9jMCA9IG1peCh3YXZlX2NvbG9yLCBmbG9hdDQoMS4wKSwgZmxvYXQ0KHNwYXJrbGUpKTsKfQpoYWxmNCBydW50aW1lX3NoYWRlcl9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzBfaW5Db2xvciA9IF9pbnB1dDsKCWZsb2F0MiBfdG1wXzFfY29vcmRzID0gdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzA7CglmbHV0dGVyX0ZyYWdDb29yZF9TMV9jMCA9IGZsb2F0NChfdG1wXzFfY29vcmRzLCAwLjAsIDAuMCk7CglGTFRfbWFpbl9TMV9jMCgpOwoJcmV0dXJuIGhhbGY0KGhhbGY0KGZyYWdDb2xvcl9TMV9jMCkpOwp9CmhhbGY0IE1hdHJpeEVmZmVjdF9TMShoYWxmNCBfaW5wdXQpIAp7CglyZXR1cm4gcnVudGltZV9zaGFkZXJfUzFfYzAoX2lucHV0KTsKfQpoYWxmNCBSZWN0X1MyX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMl9pbkNvbG9yID0gX2lucHV0OwoJaGFsZiBjb3ZlcmFnZTsKCWlmIChpbnQoMSkgPT0ga0ZpbGxCV19TMl9jMCB8fCBpbnQoMSkgPT0ga0ludmVyc2VGaWxsQldfUzJfYzApIAoJewoJCWNvdmVyYWdlID0gaGFsZihhbGwoZ3JlYXRlclRoYW4oZmxvYXQ0KHNrX0ZyYWdDb29yZC54eSwgdXJlY3RVbmlmb3JtX1MyX2MwLnp3KSwgZmxvYXQ0KHVyZWN0VW5pZm9ybV9TMl9jMC54eSwgc2tfRnJhZ0Nvb3JkLnh5KSkpKTsKCX0KCWVsc2UgCgl7CgkJaGFsZjQgZGlzdHM0ID0gc2F0dXJhdGUoaGFsZjQoMS4wLCAxLjAsIC0xLjAsIC0xLjApICogaGFsZjQoc2tfRnJhZ0Nvb3JkLnh5eHkgLSB1cmVjdFVuaWZvcm1fUzJfYzApKTsKCQloYWxmMiBkaXN0czIgPSAoZGlzdHM0Lnh5ICsgZGlzdHM0Lnp3KSAtIDEuMDsKCQljb3ZlcmFnZSA9IGRpc3RzMi54ICogZGlzdHMyLnk7Cgl9CglpZiAoaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MyX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMl9jMCkgCgl7CgkJY292ZXJhZ2UgPSAxLjAgLSBjb3ZlcmFnZTsKCX0KCXJldHVybiBoYWxmNChoYWxmNChjb3ZlcmFnZSkpOwp9CmhhbGY0IENpcmN1bGFyUlJlY3RfUzJfYzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MyX2MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MyX2MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzJfYzEueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0KaGFsZjQgQmxlbmRfUzIoaGFsZjQgX3NyYywgaGFsZjQgX2RzdCkgCnsKCXJldHVybiBibGVuZF9tb2R1bGF0ZShSZWN0X1MyX2MwKF9zcmMpLCBDaXJjdWxhclJSZWN0X1MyX2MxKF9zcmMpKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgY292ZXJhZ2UgPSB2Y292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGNvdmVyYWdlKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb2xvcl9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBCbGVuZF9TMihvdXRwdXRDb3ZlcmFnZV9TMCwgaGFsZjQoMSkpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dF9TMjsKCX0KfQoBAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAABwb3NpdGlvbggAAABjb3ZlcmFnZQUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAAAAAAA","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJQBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAA4IAEAAACAAAAAABGABAAAAAEAAAAAIBEABAA":"DAAAAExTS1M7AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgABAAAAEh4AACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpmbG9hdDQgZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzA7CmZsb2F0NCBmcmFnQ29sb3JfUzFfYzA7CmZsb2F0IHVfYWxwaGFfUzFfYzA7CmZsb2F0IHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9ibHVyX1MxX2MwOwpmbG9hdCB1X3JhZGl1c19zY2FsZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdV9jb2xvcl9TMV9jMDsKdW5pZm9ybSBmbG9hdDQgdV9jb21wb3NpdGVfMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jZW50ZXJfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdV9tYXhfcmFkaXVzX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3Jlc29sdXRpb25fc2NhbGVfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfbm9pc2Vfc2NhbGVfUzFfYzA7CnVuaWZvcm0gZmxvYXQgdV9ub2lzZV9waGFzZV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUxX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTJfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlM19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24yX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uM19TMV9jMDsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxOwp1bmlmb3JtIGZsb2F0NCB1aW5uZXJSZWN0X1MyOwp1bmlmb3JtIGhhbGYyIHVyYWRpdXNQbHVzSGFsZl9TMjsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKZmxvYXQyIEZMVF9mbHV0dGVyX2xvY2FsX0ZsdXR0ZXJGcmFnQ29vcmRfUzFfYzAoKTsKZmxvYXQyeDIgRkxUX2ZsdXR0ZXJfbG9jYWxfcm90YXRlMmRfUzFfYzAoZmxvYXQyIHJhZCk7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IGJsdXIpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChmbG9hdDIgcmVzb2x1dGlvbiwgaW5vdXQgZmxvYXQyIHAsIGZsb2F0MiB4eSwgZmxvYXQyIHJvdGF0aW9uLCBmbG9hdCBjZWxsX2RpYW1ldGVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHVyYnVsZW5jZV9TMV9jMChmbG9hdDIgdXYpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBibHVyKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAoaW5vdXQgZmxvYXQyIG4pOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAoZmxvYXQgdiwgZmxvYXQgbCwgZmxvYXQgaCk7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NwYXJrbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdCB0KTsKdm9pZCBGTFRfbWFpbl9TMV9jMCgpOwpmbG9hdDIgRkxUX2ZsdXR0ZXJfbG9jYWxfRmx1dHRlckZyYWdDb29yZF9TMV9jMCgpIAp7CglyZXR1cm4gZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzAueHk7Cn0KZmxvYXQyeDIgRkxUX2ZsdXR0ZXJfbG9jYWxfcm90YXRlMmRfUzFfYzAoZmxvYXQyIHJhZCkgCnsKCXJldHVybiBmbG9hdDJ4MihyYWQueCwgLXJhZC55LCByYWQueSwgcmFkLngpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IGJsdXIpIAp7CglmbG9hdCBibHVyX2hhbGYgPSBibHVyICogMC41OwoJZmxvYXQgZCA9IGRpc3RhbmNlKHV2LCB4eSk7CglyZXR1cm4gMS4wIC0gc21vb3Roc3RlcCgxLjAgLSBibHVyX2hhbGYsIDEuMCArIGJsdXJfaGFsZiwgZCAvIHJhZGl1cyk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAoZmxvYXQyIHJlc29sdXRpb24sIGlub3V0IGZsb2F0MiBwLCBmbG9hdDIgeHksIGZsb2F0MiByb3RhdGlvbiwgZmxvYXQgY2VsbF9kaWFtZXRlcikgCnsKCWZsb2F0MiBwYXJhbSA9IHJvdGF0aW9uOwoJcCA9IEZMVF9mbHV0dGVyX2xvY2FsX3JvdGF0ZTJkX1MxX2MwKHBhcmFtKSAqICh4eSAtIHApICsgeHk7CglwID0gbW9kKHAsIGZsb2F0MihjZWxsX2RpYW1ldGVyKSkgLyByZXNvbHV0aW9uOwoJZmxvYXQgY2VsbF91diA9IChjZWxsX2RpYW1ldGVyIC8gcmVzb2x1dGlvbi55KSAqIDAuNTsKCWZsb2F0IHIgPSAwLjY1ICogY2VsbF91djsKCWZsb2F0MiBwYXJhbV8xID0gcDsKCWZsb2F0MiBwYXJhbV8yID0gZmxvYXQyKGNlbGxfdXYpOwoJZmxvYXQgcGFyYW1fMyA9IHI7CglmbG9hdCBwYXJhbV80ID0gciAqIDUwLjA7CglyZXR1cm4gRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMywgcGFyYW1fNCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdHVyYnVsZW5jZV9TMV9jMChmbG9hdDIgdXYpIAp7CglmbG9hdDIgdXZfc2NhbGUgPSB1diAqIGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fMSA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzIgPSB1X2NpcmNsZTFfUzFfYzA7CglmbG9hdDIgcGFyYW1fMyA9IHVfcm90YXRpb24xX1MxX2MwOwoJZmxvYXQgcGFyYW1fNCA9IDAuMTc7CglmbG9hdCBfMzE5ID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW0sIHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMsIHBhcmFtXzQpOwoJZmxvYXQgZzEgPSBfMzE5OwoJZmxvYXQyIHBhcmFtXzUgPSBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbV82ID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fNyA9IHVfY2lyY2xlMl9TMV9jMDsKCWZsb2F0MiBwYXJhbV84ID0gdV9yb3RhdGlvbjJfUzFfYzA7CglmbG9hdCBwYXJhbV85ID0gMC4yOwoJZmxvYXQgXzMzMSA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtXzUsIHBhcmFtXzYsIHBhcmFtXzcsIHBhcmFtXzgsIHBhcmFtXzkpOwoJZmxvYXQgZzIgPSBfMzMxOwoJZmxvYXQyIHBhcmFtXzEwID0gZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW1fMTEgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV8xMiA9IHVfY2lyY2xlM19TMV9jMDsKCWZsb2F0MiBwYXJhbV8xMyA9IHVfcm90YXRpb24zX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTQgPSAwLjI3NTsKCWZsb2F0IF8zNDQgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbV8xMCwgcGFyYW1fMTEsIHBhcmFtXzEyLCBwYXJhbV8xMywgcGFyYW1fMTQpOwoJZmxvYXQgZzMgPSBfMzQ0OwoJZmxvYXQgdiA9ICgoZzEgKiBnMSArIGcyKSAtIGczKSAqIDAuNTsKCXJldHVybiBjbGFtcCgwLjQ1ICsgMC44ICogdiwgMC4wLCAxLjApOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfcmluZ19TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGJsdXIpIAp7CglmbG9hdDIgcGFyYW0gPSB1djsKCWZsb2F0MiBwYXJhbV8xID0geHk7CglmbG9hdCBwYXJhbV8yID0gcmFkaXVzICsgdGhpY2tuZXNzOwoJZmxvYXQgcGFyYW1fMyA9IGJsdXI7CglmbG9hdCBjaXJjbGVfb3V0ZXIgPSBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbSwgcGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMyk7CglmbG9hdDIgcGFyYW1fNCA9IHV2OwoJZmxvYXQyIHBhcmFtXzUgPSB4eTsKCWZsb2F0IHBhcmFtXzYgPSBtYXgocmFkaXVzIC0gdGhpY2tuZXNzLCAwLjApOwoJZmxvYXQgcGFyYW1fNyA9IGJsdXI7CglmbG9hdCBjaXJjbGVfaW5uZXIgPSBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbV80LCBwYXJhbV81LCBwYXJhbV82LCBwYXJhbV83KTsKCXJldHVybiBjbGFtcChjaXJjbGVfb3V0ZXIgLSBjaXJjbGVfaW5uZXIsIDAuMCwgMS4wKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChpbm91dCBmbG9hdDIgbikgCnsKCW4gPSBmcmFjdChuICogZmxvYXQyKDUuMzk4NywgNS40NDIxKSk7CgluICs9IGZsb2F0Mihkb3Qobi55eCwgbiArIGZsb2F0MigyMS41MzUxLCAxNC4zMTM3KSkpOwoJZmxvYXQgeHkgPSBuLnggKiBuLnk7CglyZXR1cm4gKGZyYWN0KHh5ICogOTUuNDMwNykgKyBmcmFjdCh4eSAqIDc1LjA0OTYxKSkgLSAxLjA7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKGZsb2F0IHYsIGZsb2F0IGwsIGZsb2F0IGgpIAp7CglyZXR1cm4gc3RlcChsLCB2KSAqICgxLjAgLSBzdGVwKGgsIHYpKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQgdCkgCnsKCWZsb2F0MiBwYXJhbSA9IHV2OwoJZmxvYXQgXzI0MiA9IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKHBhcmFtKTsKCWZsb2F0IG4gPSBfMjQyOwoJZmxvYXQgcGFyYW1fMSA9IG47CglmbG9hdCBwYXJhbV8yID0gMC4wOwoJZmxvYXQgcGFyYW1fMyA9IDAuMDU7CglmbG9hdCBzID0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzEsIHBhcmFtXzIsIHBhcmFtXzMpOwoJZmxvYXQgcGFyYW1fNCA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMC4zNSkpOwoJZmxvYXQgcGFyYW1fNSA9IDAuMTsKCWZsb2F0IHBhcmFtXzYgPSAwLjE1OwoJcyArPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fNCwgcGFyYW1fNSwgcGFyYW1fNik7CglmbG9hdCBwYXJhbV83ID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAwLjcpKTsKCWZsb2F0IHBhcmFtXzggPSAwLjI7CglmbG9hdCBwYXJhbV85ID0gMC4yNTsKCXMgKz0gRkxUX2ZsdXR0ZXJfbG9jYWxfdGhyZXNob2xkX1MxX2MwKHBhcmFtXzcsIHBhcmFtXzgsIHBhcmFtXzkpOwoJZmxvYXQgcGFyYW1fMTAgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDEuMDUpKTsKCWZsb2F0IHBhcmFtXzExID0gMC4zOwoJZmxvYXQgcGFyYW1fMTIgPSAwLjM1OwoJcyArPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fMTAsIHBhcmFtXzExLCBwYXJhbV8xMik7CglyZXR1cm4gY2xhbXAocywgMC4wLCAxLjApICogMC41NTsKfQp2b2lkIEZMVF9tYWluX1MxX2MwKCkgCnsKCXVfYWxwaGFfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLng7Cgl1X3NwYXJrbGVfYWxwaGFfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLnk7Cgl1X2JsdXJfUzFfYzAgPSB1X2NvbXBvc2l0ZV8xX1MxX2MwLno7Cgl1X3JhZGl1c19zY2FsZV9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAudzsKCWZsb2F0MiBwID0gRkxUX2ZsdXR0ZXJfbG9jYWxfRmx1dHRlckZyYWdDb29yZF9TMV9jMCgpOwoJZmxvYXQyIHV2XzEgPSBwICogdV9yZXNvbHV0aW9uX3NjYWxlX1MxX2MwOwoJZmxvYXQyIGRlbnNpdHlfdXYgPSB1dl8xIC0gbW9kKHAsIHVfbm9pc2Vfc2NhbGVfUzFfYzApOwoJZmxvYXQgcmFkaXVzID0gdV9tYXhfcmFkaXVzX1MxX2MwICogdV9yYWRpdXNfc2NhbGVfUzFfYzA7CglmbG9hdDIgcGFyYW1fMTMgPSB1dl8xOwoJZmxvYXQgdHVyYnVsZW5jZSA9IEZMVF9mbHV0dGVyX2xvY2FsX3R1cmJ1bGVuY2VfUzFfYzAocGFyYW1fMTMpOwoJZmxvYXQyIHBhcmFtXzE0ID0gcDsKCWZsb2F0MiBwYXJhbV8xNSA9IHVfY2VudGVyX1MxX2MwOwoJZmxvYXQgcGFyYW1fMTYgPSByYWRpdXM7CglmbG9hdCBwYXJhbV8xNyA9IDAuMDUgKiB1X21heF9yYWRpdXNfUzFfYzA7CglmbG9hdCBwYXJhbV8xOCA9IHVfYmx1cl9TMV9jMDsKCWZsb2F0IHJpbmcgPSBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X3JpbmdfUzFfYzAocGFyYW1fMTQsIHBhcmFtXzE1LCBwYXJhbV8xNiwgcGFyYW1fMTcsIHBhcmFtXzE4KTsKCWZsb2F0MiBwYXJhbV8xOSA9IGRlbnNpdHlfdXY7CglmbG9hdCBwYXJhbV8yMCA9IHVfbm9pc2VfcGhhc2VfUzFfYzA7CglmbG9hdCBzcGFya2xlID0gKChGTFRfZmx1dHRlcl9sb2NhbF9zcGFya2xlX1MxX2MwKHBhcmFtXzE5LCBwYXJhbV8yMCkgKiByaW5nKSAqIHR1cmJ1bGVuY2UpICogdV9zcGFya2xlX2FscGhhX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzIxID0gcDsKCWZsb2F0MiBwYXJhbV8yMiA9IHVfY2VudGVyX1MxX2MwOwoJZmxvYXQgcGFyYW1fMjMgPSByYWRpdXM7CglmbG9hdCBwYXJhbV8yNCA9IHVfYmx1cl9TMV9jMDsKCWZsb2F0IHdhdmVfYWxwaGEgPSAoRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAocGFyYW1fMjEsIHBhcmFtXzIyLCBwYXJhbV8yMywgcGFyYW1fMjQpICogdV9hbHBoYV9TMV9jMCkgKiB1X2NvbG9yX1MxX2MwLnc7CglmbG9hdDQgd2F2ZV9jb2xvciA9IGZsb2F0NCh1X2NvbG9yX1MxX2MwLnh5eiAqIHdhdmVfYWxwaGEsIHdhdmVfYWxwaGEpOwoJZnJhZ0NvbG9yX1MxX2MwID0gbWl4KHdhdmVfY29sb3IsIGZsb2F0NCgxLjApLCBmbG9hdDQoc3BhcmtsZSkpOwp9CmhhbGY0IHJ1bnRpbWVfc2hhZGVyX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKCWZsdXR0ZXJfRnJhZ0Nvb3JkX1MxX2MwID0gZmxvYXQ0KF90bXBfMV9jb29yZHMsIDAuMCwgMC4wKTsKCUZMVF9tYWluX1MxX2MwKCk7CglyZXR1cm4gaGFsZjQoaGFsZjQoZnJhZ0NvbG9yX1MxX2MwKSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBydW50aW1lX3NoYWRlcl9TMV9jMChfaW5wdXQpOwp9CmhhbGY0IENpcmN1bGFyUlJlY3RfUzIoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQgZHkwID0gdWlubmVyUmVjdF9TMi5UIC0gc2tfRnJhZ0Nvb3JkLnk7CglmbG9hdDIgZHh5MSA9IHNrX0ZyYWdDb29yZC54eSAtIHVpbm5lclJlY3RfUzIuUkI7CglmbG9hdDIgZHh5ID0gbWF4KGZsb2F0MihkeHkxLngsIG1heChkeTAsIGR4eTEueSkpLCAwLjApOwoJaGFsZiBsZWZ0QWxwaGEgPSBoYWxmKHNhdHVyYXRlKHNrX0ZyYWdDb29yZC54IC0gdWlubmVyUmVjdF9TMi5MKSk7CgloYWxmIGFscGhhID0gbGVmdEFscGhhICogaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzIueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChjb3ZlcmFnZSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBNYXRyaXhFZmZlY3RfUzEob3V0cHV0Q29sb3JfUzApOwoJaGFsZjQgb3V0cHV0X1MyOwoJb3V0cHV0X1MyID0gQ2lyY3VsYXJSUmVjdF9TMihvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0X1MxICogb3V0cHV0X1MyOwoJfQp9CgAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAcG9zaXRpb24IAAAAY292ZXJhZ2UFAAAAY29sb3IAAAAKAAAAbG9jYWxDb29yZAAAAAAAAA==","AYAA5AADQAAAOAEARAFQJAABBADIB7777777777777777777777767YAAAAAAAAAAAAMYAAAAAAAQAAAABAMQAAAAA":"DAAAAExTS1PbAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKaW4gZmxvYXQ0IGluQ2lyY2xlRWRnZTsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQ0IHZpbkNpcmNsZUVkZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBDaXJjbGVHZW9tZXRyeVByb2Nlc3NvcgoJdmluQ2lyY2xlRWRnZV9TMCA9IGluQ2lyY2xlRWRnZTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzBfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247CglmbG9hdDIgX3RtcF8yX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJc2tfUG9zaXRpb24gPSBfdG1wXzBfaW5Qb3NpdGlvbi54eTAxOwp9CgAAAAAAQwIAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpub3BlcnNwZWN0aXZlIGluIGZsb2F0NCB2aW5DaXJjbGVFZGdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZpbkNvbG9yX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgQ2lyY2xlR2VvbWV0cnlQcm9jZXNzb3IKCWZsb2F0NCBjaXJjbGVFZGdlOwoJY2lyY2xlRWRnZSA9IHZpbkNpcmNsZUVkZ2VfUzA7CgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmluQ29sb3JfUzA7CglmbG9hdCBkID0gbGVuZ3RoKGNpcmNsZUVkZ2UueHkpOwoJaGFsZiBkaXN0YW5jZVRvT3V0ZXJFZGdlID0gaGFsZihjaXJjbGVFZGdlLnogKiAoMS4wIC0gZCkpOwoJaGFsZiBlZGdlQWxwaGEgPSBzYXR1cmF0ZShkaXN0YW5jZVRvT3V0ZXJFZGdlKTsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoZWRnZUFscGhhKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAMAAAAaW5DaXJjbGVFZGdlAAAAAA==","GYQACAAAAAMAADAAAIOAAAH677776IZOCAAP577777777777777777YBAAAAAAAAAAAHEADZAAAAAAIAAAAAAMYAAAAAAAQAAAABAMQAAAAAA":"DAAAAExTS1MaAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGhhbGY0IGNvbG9yOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAABAAAA5gIAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQp1bmlmb3JtIGZsb2F0NCB1aW5uZXJSZWN0X1MxOwp1bmlmb3JtIGhhbGYyIHVyYWRpdXNQbHVzSGFsZl9TMTsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7CmhhbGY0IENpcmN1bGFyUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzEueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBDaXJjdWxhclJSZWN0X1MxKG91dHB1dENvdmVyYWdlX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dF9TMTsKCX0KfQoAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAAAAAAAA==","G2QACAAAABAAADAAAIOAAAAADIIAAIRODAAP577774DSAIAA737777YBAAAAAAAAAAAHEADZAAAAAAIAAAAAAMYAAAAAAAQAAAABAMQAAAAAA":"DAAAAExTS1PqAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0IGNvdmVyYWdlOwppbiBoYWxmNCBjb2xvcjsKaW4gZmxvYXQ0IGdlb21TdWJzZXQ7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmdlb21TdWJzZXRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2Y29sb3JfUzAgPSBjb2xvcjsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJdmdlb21TdWJzZXRfUzAgPSBnZW9tU3Vic2V0OwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAQAAADMEAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBmbG9hdDQgdWlubmVyUmVjdF9TMTsKdW5pZm9ybSBoYWxmMiB1cmFkaXVzUGx1c0hhbGZfUzE7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0IHZjb3ZlcmFnZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDQgdmdlb21TdWJzZXRfUzA7CmhhbGY0IENpcmN1bGFyUlJlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJZmxvYXQyIGR4eTAgPSB1aW5uZXJSZWN0X1MxLkxUIC0gc2tfRnJhZ0Nvb3JkLnh5OwoJZmxvYXQyIGR4eTEgPSBza19GcmFnQ29vcmQueHkgLSB1aW5uZXJSZWN0X1MxLlJCOwoJZmxvYXQyIGR4eSA9IG1heChtYXgoZHh5MCwgZHh5MSksIDAuMCk7CgloYWxmIGFscGhhID0gaGFsZihzYXR1cmF0ZSh1cmFkaXVzUGx1c0hhbGZfUzEueCAtIGxlbmd0aChkeHkpKSk7CglyZXR1cm4gX2lucHV0ICogYWxwaGE7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZjb2xvcl9TMDsKCWZsb2F0IGNvdmVyYWdlID0gdmNvdmVyYWdlX1MwOwoJZmxvYXQ0IGdlb1N1YnNldDsKCWdlb1N1YnNldCA9IHZnZW9tU3Vic2V0X1MwOwoJZmxvYXQ0IGRpc3RzNCA9IHNhdHVyYXRlKGZsb2F0NCgxLCAxLCAtMSwgLTEpICogKHNrX0ZyYWdDb29yZC54eXh5IC0gZ2VvU3Vic2V0KSk7CglmbG9hdDIgZGlzdHMyID0gZGlzdHM0Lnh5ICsgZGlzdHM0Lnp3IC0gMTsKCWNvdmVyYWdlID0gbWluKGNvdmVyYWdlLCBkaXN0czIueCAqIGRpc3RzMi55KTsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoY292ZXJhZ2UpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQ2lyY3VsYXJSUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGdlb21TdWJzZXQAAAAAAAA=","CMRQCIAABBYAAAEIXBAAACDQMAABRAFAAAAAAAAAAAAAAAGABQAAAAEAAAAAAAEEBQAAAAA":"DAAAAExTS1OZAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0NCB1bG9jYWxNYXRyaXhfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBmbG9hdDIgaW5FbGxpcHNlT2Zmc2V0OwppbiBmbG9hdDQgaW5FbGxpcHNlUmFkaWk7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2RWxsaXBzZU9mZnNldHNfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0NCB2RWxsaXBzZVJhZGlpX1MwOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgRWxsaXBzZUdlb21ldHJ5UHJvY2Vzc29yCgl2RWxsaXBzZU9mZnNldHNfUzAgPSBpbkVsbGlwc2VPZmZzZXQ7Cgl2RWxsaXBzZVJhZGlpX1MwID0gaW5FbGxpcHNlUmFkaWk7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDIgX3RtcF8wX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJZmxvYXQyIF90bXBfMV9pblBvc2l0aW9uID0gdWxvY2FsTWF0cml4X1MwLnh6ICogaW5Qb3NpdGlvbiArIHVsb2NhbE1hdHJpeF9TMC55dzsKCXNrX1Bvc2l0aW9uID0gX3RtcF8wX2luUG9zaXRpb24ueHkwMTsKfQoAAAAAAAAA2QMAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2RWxsaXBzZU9mZnNldHNfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQ0IHZFbGxpcHNlUmFkaWlfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmluQ29sb3JfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBFbGxpcHNlR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2aW5Db2xvcl9TMDsKCWZsb2F0MiBvZmZzZXQgPSB2RWxsaXBzZU9mZnNldHNfUzAueHk7CglvZmZzZXQgKj0gdkVsbGlwc2VSYWRpaV9TMC54eTsKCWZsb2F0IHRlc3QgPSBkb3Qob2Zmc2V0LCBvZmZzZXQpIC0gMS4wOwoJZmxvYXQyIGdyYWQgPSAyLjAqb2Zmc2V0KnZFbGxpcHNlUmFkaWlfUzAueHk7CglmbG9hdCBncmFkX2RvdCA9IGRvdChncmFkLCBncmFkKTsKCWdyYWRfZG90ID0gbWF4KGdyYWRfZG90LCAxLjE3NTVlLTM4KTsKCWZsb2F0IGludmxlbiA9IGludmVyc2VzcXJ0KGdyYWRfZG90KTsKCWZsb2F0IGVkZ2VBbHBoYSA9IHNhdHVyYXRlKDAuNS10ZXN0Kmludmxlbik7CglvZmZzZXQgPSB2RWxsaXBzZU9mZnNldHNfUzAueHkqdkVsbGlwc2VSYWRpaV9TMC56dzsKCXRlc3QgPSBkb3Qob2Zmc2V0LCBvZmZzZXQpIC0gMS4wOwoJZ3JhZCA9IDIuMCpvZmZzZXQqdkVsbGlwc2VSYWRpaV9TMC56dzsKCWdyYWRfZG90ID0gZG90KGdyYWQsIGdyYWQpOwoJaW52bGVuID0gaW52ZXJzZXNxcnQoZ3JhZF9kb3QpOwoJZWRnZUFscGhhICo9IHNhdHVyYXRlKDAuNSt0ZXN0Kmludmxlbik7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGhhbGYoZWRnZUFscGhhKSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAoAAABpblBvc2l0aW9uAAAHAAAAaW5Db2xvcgAPAAAAaW5FbGxpcHNlT2Zmc2V0AA4AAABpbkVsbGlwc2VSYWRpaQAAAAAAAA==","GYJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAAQQGAAZAADIAAAAIH5K3LIKAAAAAAMAAAAAIAAAAAAFMZBQP3FQWAUAABQAAAAAAAAAAAAADGAAAAAAAEAAAAAIDEAAA":"DAAAAExTS1MwAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgEAAADzBAAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCmNvbnN0IGludCBrRmlsbEFBX1MxX2MwID0gMTsKY29uc3QgaW50IGtJbnZlcnNlRmlsbEJXX1MxX2MwID0gMjsKY29uc3QgaW50IGtJbnZlcnNlRmlsbEFBX1MxX2MwID0gMzsKdW5pZm9ybSBmbG9hdDQgdWNpcmNsZV9TMV9jMDsKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2bG9jYWxDb29yZF9TMDsKaGFsZjQgQ2lyY2xlX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJaGFsZiBkOwoJaWYgKGludCgxKSA9PSBrSW52ZXJzZUZpbGxCV19TMV9jMCB8fCBpbnQoMSkgPT0ga0ludmVyc2VGaWxsQUFfUzFfYzApIAoJewoJCWQgPSBoYWxmKChsZW5ndGgoKHVjaXJjbGVfUzFfYzAueHkgLSBza19GcmFnQ29vcmQueHkpICogdWNpcmNsZV9TMV9jMC53KSAtIDEuMCkgKiB1Y2lyY2xlX1MxX2MwLnopOwoJfQoJZWxzZSAKCXsKCQlkID0gaGFsZigoMS4wIC0gbGVuZ3RoKCh1Y2lyY2xlX1MxX2MwLnh5IC0gc2tfRnJhZ0Nvb3JkLnh5KSAqIHVjaXJjbGVfUzFfYzAudykpICogdWNpcmNsZV9TMV9jMC56KTsKCX0KCXJldHVybiBoYWxmNChoYWxmNChpbnQoMSkgPT0ga0ZpbGxBQV9TMV9jMCB8fCBpbnQoMSkgPT0ga0ludmVyc2VGaWxsQUFfUzFfYzAgPyBzYXR1cmF0ZShkKSA6IGhhbGYoZCA+IDAuNSkpKTsKfQpoYWxmNCBCbGVuZF9TMShoYWxmNCBfc3JjLCBoYWxmNCBfZHN0KSAKewoJcmV0dXJuIGJsZW5kX21vZHVsYXRlKF9zcmMsIENpcmNsZV9TMV9jMChfc3JjKSk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzAgPSBoYWxmNCgxKTsKCWZsb2F0MiB0ZXhDb29yZDsKCXRleENvb3JkID0gdmxvY2FsQ29vcmRfUzA7CglvdXRwdXRDb2xvcl9TMCA9IChibGVuZF9tb2R1bGF0ZShzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzAsIHRleENvb3JkKSwgaGFsZjQoMSkpKTsKCWNvbnN0IGhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoMSk7CgloYWxmNCBvdXRwdXRfUzE7CglvdXRwdXRfUzEgPSBCbGVuZF9TMShvdXRwdXRDb3ZlcmFnZV9TMCwgaGFsZjQoMSkpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0X1MxOwoJfQp9CgABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAABwb3NpdGlvbgoAAABsb2NhbENvb3JkAAAAAAAA","EEAQMYAAMAAAEADAAABAEYAAAICIAB5AABQAAAQAMAAAEATAAABAIIGAAEDCBYQCA4AAAAAAEAB5AAAAAAYFRP5FIUAQAADQAAAABAAAAAAABQEKBTLG62KRAAAAAHAAAAAAAAAAAAYAGAAAAAQAAAAAAAQQGAAA":"DAAAAExTS1MoDAAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDQgcmFkaWlfc2VsZWN0b3I7CmluIGZsb2F0NCBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzOwppbiBmbG9hdDQgYWFfYmxvYXRfYW5kX2NvdmVyYWdlOwppbiBmbG9hdDQgcmFkaWlfeDsKaW4gZmxvYXQ0IHJhZGlpX3k7CmluIGZsb2F0NCBza2V3OwppbiBmbG9hdDIgdHJhbnNsYXRlX2FuZF9sb2NhbHJvdGF0ZTsKaW4gaGFsZjQgY29sb3I7Cm5vcGVyc3BlY3RpdmUgb3V0IGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZhcmNjb29yZF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgRmlsbFJSZWN0T3A6OlByb2Nlc3NvcgoJdmNvbG9yX1MwID0gY29sb3I7CglmbG9hdCBhYV9ibG9hdF9tdWx0aXBsaWVyID0gMTsKCWZsb2F0MiBjb3JuZXIgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnh5OwoJZmxvYXQyIHJhZGl1c19vdXRzZXQgPSBjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzLnp3OwoJZmxvYXQyIGFhX2Jsb2F0X2RpcmVjdGlvbiA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS54eTsKCWZsb2F0IGlzX2xpbmVhcl9jb3ZlcmFnZSA9IGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZS53OwoJZmxvYXQyIHBpeGVsbGVuZ3RoID0gaW52ZXJzZXNxcnQoZmxvYXQyKGRvdChza2V3Lnh6LCBza2V3Lnh6KSwgZG90KHNrZXcueXcsIHNrZXcueXcpKSk7CglmbG9hdDQgbm9ybWFsaXplZF9heGlzX2RpcnMgPSBza2V3ICogcGl4ZWxsZW5ndGgueHl4eTsKCWZsb2F0MiBheGlzd2lkdGhzID0gKGFicyhub3JtYWxpemVkX2F4aXNfZGlycy54eSkgKyBhYnMobm9ybWFsaXplZF9heGlzX2RpcnMuencpKTsKCWZsb2F0MiBhYV9ibG9hdHJhZGl1cyA9IGF4aXN3aWR0aHMgKiBwaXhlbGxlbmd0aCAqIC41OwoJZmxvYXQ0IHJhZGlpX2FuZF9uZWlnaGJvcnMgPSByYWRpaV9zZWxlY3RvciogZmxvYXQ0eDQocmFkaWlfeCwgcmFkaWlfeSwgcmFkaWlfeC55eHd6LCByYWRpaV95Lnd6eXgpOwoJZmxvYXQyIHJhZGlpID0gcmFkaWlfYW5kX25laWdoYm9ycy54eTsKCWZsb2F0MiBuZWlnaGJvcl9yYWRpaSA9IHJhZGlpX2FuZF9uZWlnaGJvcnMuenc7CglmbG9hdCBjb3ZlcmFnZV9tdWx0aXBsaWVyID0gMTsKCWlmIChhbnkoZ3JlYXRlclRoYW4oYWFfYmxvYXRyYWRpdXMsIGZsb2F0MigxKSkpKSAKCXsKCQljb3JuZXIgPSBtYXgoYWJzKGNvcm5lciksIGFhX2Jsb2F0cmFkaXVzKSAqIHNpZ24oY29ybmVyKTsKCQljb3ZlcmFnZV9tdWx0aXBsaWVyID0gMSAvIChtYXgoYWFfYmxvYXRyYWRpdXMueCwgMSkgKiBtYXgoYWFfYmxvYXRyYWRpdXMueSwgMSkpOwoJCXJhZGlpID0gZmxvYXQyKDApOwoJfQoJZmxvYXQgY292ZXJhZ2UgPSBhYV9ibG9hdF9hbmRfY292ZXJhZ2UuejsKCWlmIChhbnkobGVzc1RoYW4ocmFkaWksIGFhX2Jsb2F0cmFkaXVzICogMS41KSkpIAoJewoJCXJhZGlpID0gZmxvYXQyKDApOwoJCWFhX2Jsb2F0X2RpcmVjdGlvbiA9IHNpZ24oY29ybmVyKTsKCQlpZiAoY292ZXJhZ2UgPiAuNSkgCgkJewoJCQlhYV9ibG9hdF9kaXJlY3Rpb24gPSAtYWFfYmxvYXRfZGlyZWN0aW9uOwoJCX0KCQlpc19saW5lYXJfY292ZXJhZ2UgPSAxOwoJfQoJZWxzZSAKCXsKCQlyYWRpaSA9IGNsYW1wKHJhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQluZWlnaGJvcl9yYWRpaSA9IGNsYW1wKG5laWdoYm9yX3JhZGlpLCBwaXhlbGxlbmd0aCAqIDEuNSwgMiAtIHBpeGVsbGVuZ3RoICogMS41KTsKCQlmbG9hdDIgc3BhY2luZyA9IDIgLSByYWRpaSAtIG5laWdoYm9yX3JhZGlpOwoJCWZsb2F0MiBleHRyYV9wYWQgPSBtYXgocGl4ZWxsZW5ndGggKiAuMDYyNSAtIHNwYWNpbmcsIGZsb2F0MigwKSk7CgkJcmFkaWkgLT0gZXh0cmFfcGFkICogLjU7Cgl9CglmbG9hdDIgYWFfb3V0c2V0ID0gYWFfYmxvYXRfZGlyZWN0aW9uICogYWFfYmxvYXRyYWRpdXMgKiBhYV9ibG9hdF9tdWx0aXBsaWVyOwoJZmxvYXQyIHZlcnRleHBvcyA9IGNvcm5lciArIHJhZGl1c19vdXRzZXQgKiByYWRpaSArIGFhX291dHNldDsKCWlmIChjb3ZlcmFnZSA+IC41KSAKCXsKCQlpZiAoYWFfYmxvYXRfZGlyZWN0aW9uLnggIT0gMCAmJiB2ZXJ0ZXhwb3MueCAqIGNvcm5lci54IDwgMCkgCgkJewoJCQlmbG9hdCBiYWNrc2V0ID0gYWJzKHZlcnRleHBvcy54KTsKCQkJdmVydGV4cG9zLnggPSAwOwoJCQl2ZXJ0ZXhwb3MueSArPSBiYWNrc2V0ICogc2lnbihjb3JuZXIueSkgKiBwaXhlbGxlbmd0aC55L3BpeGVsbGVuZ3RoLng7CgkJCWNvdmVyYWdlID0gKGNvdmVyYWdlIC0gLjUpICogYWJzKGNvcm5lci54KSAvIChhYnMoY29ybmVyLngpICsgYmFja3NldCkgKyAuNTsKCQl9CgkJaWYgKGFhX2Jsb2F0X2RpcmVjdGlvbi55ICE9IDAgJiYgdmVydGV4cG9zLnkgKiBjb3JuZXIueSA8IDApIAoJCXsKCQkJZmxvYXQgYmFja3NldCA9IGFicyh2ZXJ0ZXhwb3MueSk7CgkJCXZlcnRleHBvcy55ID0gMDsKCQkJdmVydGV4cG9zLnggKz0gYmFja3NldCAqIHNpZ24oY29ybmVyLngpICogcGl4ZWxsZW5ndGgueC9waXhlbGxlbmd0aC55OwoJCQljb3ZlcmFnZSA9IChjb3ZlcmFnZSAtIC41KSAqIGFicyhjb3JuZXIueSkgLyAoYWJzKGNvcm5lci55KSArIGJhY2tzZXQpICsgLjU7CgkJfQoJfQoJZmxvYXQyeDIgc2tld21hdHJpeCA9IGZsb2F0MngyKHNrZXcueHksIHNrZXcuencpOwoJZmxvYXQyIGRldmNvb3JkID0gdmVydGV4cG9zICogc2tld21hdHJpeCArIHRyYW5zbGF0ZV9hbmRfbG9jYWxyb3RhdGUueHk7CglpZiAoMCAhPSBpc19saW5lYXJfY292ZXJhZ2UpIAoJewoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MigwLCBjb3ZlcmFnZSAqIGNvdmVyYWdlX211bHRpcGxpZXIpOwoJfQoJZWxzZSAKCXsKCQlmbG9hdDIgYXJjY29vcmQgPSAxIC0gYWJzKHJhZGl1c19vdXRzZXQpICsgYWFfb3V0c2V0L3JhZGlpICogY29ybmVyOwoJCXZhcmNjb29yZF9TMC54eSA9IGZsb2F0MihhcmNjb29yZC54KzEsIGFyY2Nvb3JkLnkpOwoJfQoJc2tfUG9zaXRpb24gPSBkZXZjb29yZC54eTAxOwp9CgEAAACdBQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCmNvbnN0IGludCBrRmlsbEFBX1MxX2MwID0gMTsKY29uc3QgaW50IGtJbnZlcnNlRmlsbEJXX1MxX2MwID0gMjsKY29uc3QgaW50IGtJbnZlcnNlRmlsbEFBX1MxX2MwID0gMzsKdW5pZm9ybSBmbG9hdDQgdWNpcmNsZV9TMV9jMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZhcmNjb29yZF9TMDsKaGFsZjQgQ2lyY2xlX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJaGFsZiBkOwoJaWYgKGludCgzKSA9PSBrSW52ZXJzZUZpbGxCV19TMV9jMCB8fCBpbnQoMykgPT0ga0ludmVyc2VGaWxsQUFfUzFfYzApIAoJewoJCWQgPSBoYWxmKChsZW5ndGgoKHVjaXJjbGVfUzFfYzAueHkgLSBza19GcmFnQ29vcmQueHkpICogdWNpcmNsZV9TMV9jMC53KSAtIDEuMCkgKiB1Y2lyY2xlX1MxX2MwLnopOwoJfQoJZWxzZSAKCXsKCQlkID0gaGFsZigoMS4wIC0gbGVuZ3RoKCh1Y2lyY2xlX1MxX2MwLnh5IC0gc2tfRnJhZ0Nvb3JkLnh5KSAqIHVjaXJjbGVfUzFfYzAudykpICogdWNpcmNsZV9TMV9jMC56KTsKCX0KCXJldHVybiBoYWxmNChoYWxmNChpbnQoMykgPT0ga0ZpbGxBQV9TMV9jMCB8fCBpbnQoMykgPT0ga0ludmVyc2VGaWxsQUFfUzFfYzAgPyBzYXR1cmF0ZShkKSA6IGhhbGYoZCA+IDAuNSkpKTsKfQpoYWxmNCBCbGVuZF9TMShoYWxmNCBfc3JjLCBoYWxmNCBfZHN0KSAKewoJcmV0dXJuIGJsZW5kX21vZHVsYXRlKF9zcmMsIENpcmNsZV9TMV9jMChfc3JjKSk7Cn0Kdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIEZpbGxSUmVjdE9wOjpQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7CglmbG9hdCB4X3BsdXNfMT12YXJjY29vcmRfUzAueCwgeT12YXJjY29vcmRfUzAueTsKCWhhbGYgY292ZXJhZ2U7CglpZiAoMCA9PSB4X3BsdXNfMSkgCgl7CgkJY292ZXJhZ2UgPSBoYWxmKHkpOwoJfQoJZWxzZSAKCXsKCQlmbG9hdCBmbiA9IHhfcGx1c18xICogKHhfcGx1c18xIC0gMik7CgkJZm4gPSBmbWEoeSx5LCBmbik7CgkJZmxvYXQgZm53aWR0aCA9IGZ3aWR0aChmbik7CgkJY292ZXJhZ2UgPSAuNSAtIGhhbGYoZm4vZm53aWR0aCk7CgkJY292ZXJhZ2UgPSBjbGFtcChjb3ZlcmFnZSwgMCwgMSk7Cgl9CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGNvdmVyYWdlKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IEJsZW5kX1MxKG91dHB1dENvdmVyYWdlX1MwLCBoYWxmNCgxKSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAAAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAOAAAAcmFkaWlfc2VsZWN0b3IAABkAAABjb3JuZXJfYW5kX3JhZGl1c19vdXRzZXRzAAAAFQAAAGFhX2Jsb2F0X2FuZF9jb3ZlcmFnZQAAAAcAAAByYWRpaV94AAcAAAByYWRpaV95AAQAAABza2V3GQAAAHRyYW5zbGF0ZV9hbmRfbG9jYWxyb3RhdGUAAAAFAAAAY29sb3IAAAAAAAAA","GYJAAAAAAAQAADAAAIOAAAH677777777777QGHAQAD7P7777777777YBAAAAAAQAAAAAEQQGABZAA6IAAAAACAAAAAADGAAAAAAAEAAAAAIDEAAAAAAA":"DAAAAExTS1MwAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgEAAACHAwAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHVpbm5lclJlY3RfUzE7CnVuaWZvcm0gaGFsZjIgdXJhZGl1c1BsdXNIYWxmX1MxOwpzYW1wbGVyRXh0ZXJuYWxPRVMgdVRleHR1cmVTYW1wbGVyXzBfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZsb2NhbENvb3JkX1MwOwpoYWxmNCBDaXJjdWxhclJSZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCWZsb2F0MiBkeHkwID0gdWlubmVyUmVjdF9TMS5MVCAtIHNrX0ZyYWdDb29yZC54eTsKCWZsb2F0MiBkeHkxID0gc2tfRnJhZ0Nvb3JkLnh5IC0gdWlubmVyUmVjdF9TMS5SQjsKCWZsb2F0MiBkeHkgPSBtYXgobWF4KGR4eTAsIGR4eTEpLCAwLjApOwoJaGFsZiBhbHBoYSA9IGhhbGYoc2F0dXJhdGUodXJhZGl1c1BsdXNIYWxmX1MxLnggLSBsZW5ndGgoZHh5KSkpOwoJcmV0dXJuIF9pbnB1dCAqIGFscGhhOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwID0gaGFsZjQoMSk7CglmbG9hdDIgdGV4Q29vcmQ7Cgl0ZXhDb29yZCA9IHZsb2NhbENvb3JkX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSAoYmxlbmRfbW9kdWxhdGUoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCksIGhhbGY0KDEpKSk7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gQ2lyY3VsYXJSUmVjdF9TMShvdXRwdXRDb3ZlcmFnZV9TMCk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAHBvc2l0aW9uCgAAAGxvY2FsQ29vcmQAAAAAAAA=","AYTRVAADQAAAOAEARAFQJAABBADAAAILBYAACCYUQD777777777767YAAAAAAAAAAAAMYAAAAAAAQAAAABAMQAAAAA":"DAAAAExTS1PnAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0NCB1bG9jYWxNYXRyaXhfUzA7CmluIGZsb2F0MiBpblBvc2l0aW9uOwppbiBoYWxmNCBpbkNvbG9yOwppbiBmbG9hdDQgaW5DaXJjbGVFZGdlOwppbiBoYWxmMyBpbkNsaXBQbGFuZTsKaW4gaGFsZjMgaW5Jc2VjdFBsYW5lOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjMgdmluQ2xpcFBsYW5lX1MwOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmMyB2aW5Jc2VjdFBsYW5lX1MwOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgQ2lyY2xlR2VvbWV0cnlQcm9jZXNzb3IKCXZpbkNpcmNsZUVkZ2VfUzAgPSBpbkNpcmNsZUVkZ2U7Cgl2aW5DbGlwUGxhbmVfUzAgPSBpbkNsaXBQbGFuZTsKCXZpbklzZWN0UGxhbmVfUzAgPSBpbklzZWN0UGxhbmU7Cgl2aW5Db2xvcl9TMCA9IGluQ29sb3I7CglmbG9hdDIgX3RtcF8wX2luUG9zaXRpb24gPSBpblBvc2l0aW9uOwoJZmxvYXQyIF90bXBfMV9pblBvc2l0aW9uID0gdWxvY2FsTWF0cml4X1MwLnh6ICogaW5Qb3NpdGlvbiArIHVsb2NhbE1hdHJpeF9TMC55dzsKCXNrX1Bvc2l0aW9uID0gX3RtcF8wX2luUG9zaXRpb24ueHkwMTsKfQoAAAAAAFIEAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDQgdmluQ2lyY2xlRWRnZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmMyB2aW5DbGlwUGxhbmVfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjMgdmluSXNlY3RQbGFuZV9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIENpcmNsZUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDQgY2lyY2xlRWRnZTsKCWNpcmNsZUVkZ2UgPSB2aW5DaXJjbGVFZGdlX1MwOwoJaGFsZjMgY2xpcFBsYW5lOwoJY2xpcFBsYW5lID0gdmluQ2xpcFBsYW5lX1MwOwoJaGFsZjMgaXNlY3RQbGFuZTsKCWlzZWN0UGxhbmUgPSB2aW5Jc2VjdFBsYW5lX1MwOwoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZpbkNvbG9yX1MwOwoJZmxvYXQgZCA9IGxlbmd0aChjaXJjbGVFZGdlLnh5KTsKCWhhbGYgZGlzdGFuY2VUb091dGVyRWRnZSA9IGhhbGYoY2lyY2xlRWRnZS56ICogKDEuMCAtIGQpKTsKCWhhbGYgZWRnZUFscGhhID0gc2F0dXJhdGUoZGlzdGFuY2VUb091dGVyRWRnZSk7CgloYWxmIGRpc3RhbmNlVG9Jbm5lckVkZ2UgPSBoYWxmKGNpcmNsZUVkZ2UueiAqIChkIC0gY2lyY2xlRWRnZS53KSk7CgloYWxmIGlubmVyQWxwaGEgPSBzYXR1cmF0ZShkaXN0YW5jZVRvSW5uZXJFZGdlKTsKCWVkZ2VBbHBoYSAqPSBpbm5lckFscGhhOwoJaGFsZiBjbGlwID0gaGFsZihzYXR1cmF0ZShjaXJjbGVFZGdlLnogKiBkb3QoY2lyY2xlRWRnZS54eSwgY2xpcFBsYW5lLnh5KSArIGNsaXBQbGFuZS56KSk7CgljbGlwICo9IGhhbGYoc2F0dXJhdGUoY2lyY2xlRWRnZS56ICogZG90KGNpcmNsZUVkZ2UueHksIGlzZWN0UGxhbmUueHkpICsgaXNlY3RQbGFuZS56KSk7CgllZGdlQWxwaGEgKj0gY2xpcDsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoZWRnZUFscGhhKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAKAAAAaW5Qb3NpdGlvbgAABwAAAGluQ29sb3IADAAAAGluQ2lyY2xlRWRnZQsAAABpbkNsaXBQbGFuZQAMAAAAaW5Jc2VjdFBsYW5lAAAAAA==","G2JAAAAAAAUAADAAAIOAAAAADIIAB7X7777QGHAYAD7P7777777777YBAAAAAAQAAAAAAQQGAAYAGAAAAAQAAAAAAAQQGAAA":"DAAAAExTS1OjAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0IGNvdmVyYWdlOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZsb2NhbENvb3JkX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBQcmltaXRpdmUgUHJvY2Vzc29yIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJZmxvYXQyIHBvc2l0aW9uID0gcG9zaXRpb24ueHk7Cgl2bG9jYWxDb29yZF9TMCA9IGxvY2FsQ29vcmQ7Cgl2Y292ZXJhZ2VfUzAgPSBjb3ZlcmFnZTsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKfQoAAAAAADUCAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2bG9jYWxDb29yZF9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdCB2Y292ZXJhZ2VfUzA7CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwID0gaGFsZjQoMSk7CglmbG9hdDIgdGV4Q29vcmQ7Cgl0ZXhDb29yZCA9IHZsb2NhbENvb3JkX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSAoYmxlbmRfbW9kdWxhdGUoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCksIGhhbGY0KDEpKSk7CglmbG9hdCBjb3ZlcmFnZSA9IHZjb3ZlcmFnZV9TMDsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoY292ZXJhZ2UpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAcG9zaXRpb24IAAAAY292ZXJhZ2UKAAAAbG9jYWxDb29yZAAAAAAAAA==","GYJQAAAAABAAADAAAIOAAAH677777777777QGHAQAD7P7777A4QCAAAAAAAAAAQAAAAAAQQGAAYAGAAAAAQAAAAAAAQQGAAA":"DAAAAExTS1OJAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0MiBsb2NhbENvb3JkOwppbiBmbG9hdDQgdGV4U3Vic2V0Owpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0NCB2dGV4U3Vic2V0X1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCXZsb2NhbENvb3JkX1MwID0gbG9jYWxDb29yZDsKCXZ0ZXhTdWJzZXRfUzAgPSB0ZXhTdWJzZXQ7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAAHICAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2bG9jYWxDb29yZF9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDQgdnRleFN1YnNldF9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIFF1YWRQZXJFZGdlQUFHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzAgPSBoYWxmNCgxKTsKCWZsb2F0MiB0ZXhDb29yZDsKCXRleENvb3JkID0gdmxvY2FsQ29vcmRfUzA7CglmbG9hdDQgc3Vic2V0OwoJc3Vic2V0ID0gdnRleFN1YnNldF9TMDsKCXRleENvb3JkID0gY2xhbXAodGV4Q29vcmQsIHN1YnNldC5MVCwgc3Vic2V0LlJCKTsKCW91dHB1dENvbG9yX1MwID0gKGJsZW5kX21vZHVsYXRlKHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMCwgdGV4Q29vcmQpLCBoYWxmNCgxKSkpOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRDb2xvcl9TMCAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAIAAAAcG9zaXRpb24KAAAAbG9jYWxDb29yZAAACQAAAHRleFN1YnNldAAAAAAAAAA=","G2JQAAAAABEAADAAAIOAAAAADIIAB7X7777QGHAYAD7P7777A4QCQAAAAAAAAAQAAAAAAQQGAAYAGAAAAAQAAAAAAAQQGAAA":"DAAAAExTS1P8AQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgcG9zaXRpb247CmluIGZsb2F0IGNvdmVyYWdlOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKaW4gZmxvYXQ0IHRleFN1YnNldDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQyIHZsb2NhbENvb3JkX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdDQgdnRleFN1YnNldF9TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdmNvdmVyYWdlX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWZsb2F0MiBwb3NpdGlvbiA9IHBvc2l0aW9uLnh5OwoJdmxvY2FsQ29vcmRfUzAgPSBsb2NhbENvb3JkOwoJdnRleFN1YnNldF9TMCA9IHRleFN1YnNldDsKCXZjb3ZlcmFnZV9TMCA9IGNvdmVyYWdlOwoJc2tfUG9zaXRpb24gPSBwb3NpdGlvbi54eTAxOwp9CgAAAAC4AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdDIgdmxvY2FsQ29vcmRfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQ0IHZ0ZXhTdWJzZXRfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMCA9IGhhbGY0KDEpOwoJZmxvYXQyIHRleENvb3JkOwoJdGV4Q29vcmQgPSB2bG9jYWxDb29yZF9TMDsKCWZsb2F0NCBzdWJzZXQ7CglzdWJzZXQgPSB2dGV4U3Vic2V0X1MwOwoJdGV4Q29vcmQgPSBjbGFtcCh0ZXhDb29yZCwgc3Vic2V0LkxULCBzdWJzZXQuUkIpOwoJb3V0cHV0Q29sb3JfUzAgPSAoYmxlbmRfbW9kdWxhdGUoc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MwLCB0ZXhDb29yZCksIGhhbGY0KDEpKSk7CglmbG9hdCBjb3ZlcmFnZSA9IHZjb3ZlcmFnZV9TMDsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoY292ZXJhZ2UpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dENvbG9yX1MwICogb3V0cHV0Q292ZXJhZ2VfUzA7Cgl9Cn0KAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAcG9zaXRpb24IAAAAY292ZXJhZ2UKAAAAbG9jYWxDb29yZAAACQAAAHRleFN1YnNldAAAAAAAAAA=","DAQAAAAAAAAAAAAAAJQAAIGAAEACBYQCAGAEFAIBAAAAAABAAAAAAAAAAAACAA6QAAAABYCTIUIE4AIAAAYAAAAAQAAAAAGARL4FIEMEKMAAAAAMAAAAAAAAAAAAAMADAAAAAIAAAAAAAIIDAAAA":"DAAAAExTS1N4AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0MiB1QXRsYXNTaXplSW52X1MwOwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZjQgaW5Db2xvcjsKaW4gdXNob3J0MiBpblRleHR1cmVDb29yZHM7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKbm9wZXJzcGVjdGl2ZSBvdXQgZmxvYXQgdlRleEluZGV4X1MwOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2aW5Db2xvcl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgQml0bWFwVGV4dAoJaW50IHRleElkeCA9IDA7CglmbG9hdDIgdW5vcm1UZXhDb29yZHMgPSBmbG9hdDIoaW5UZXh0dXJlQ29vcmRzLngsIGluVGV4dHVyZUNvb3Jkcy55KTsKCXZUZXh0dXJlQ29vcmRzX1MwID0gdW5vcm1UZXhDb29yZHMgKiB1QXRsYXNTaXplSW52X1MwOwoJdlRleEluZGV4X1MwID0gZmxvYXQodGV4SWR4KTsKCXZpbkNvbG9yX1MwID0gaW5Db2xvcjsKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cglza19Qb3NpdGlvbiA9IGluUG9zaXRpb24ueHkwMTsKfQoBAAAAnwUAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpjb25zdCBpbnQga0ZpbGxCV19TMV9jMCA9IDA7CmNvbnN0IGludCBrSW52ZXJzZUZpbGxCV19TMV9jMCA9IDI7CmNvbnN0IGludCBrSW52ZXJzZUZpbGxBQV9TMV9jMCA9IDM7CnVuaWZvcm0gZmxvYXQ0IHVyZWN0VW5pZm9ybV9TMV9jMDsKc2FtcGxlcjJEIHVUZXh0dXJlU2FtcGxlcl8wX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VGV4dHVyZUNvb3Jkc19TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdCB2VGV4SW5kZXhfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZjQgdmluQ29sb3JfUzA7CmhhbGY0IFJlY3RfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGNvdmVyYWdlOwoJaWYgKGludCgxKSA9PSBrRmlsbEJXX1MxX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxCV19TMV9jMCkgCgl7CgkJY292ZXJhZ2UgPSBoYWxmKGFsbChncmVhdGVyVGhhbihmbG9hdDQoc2tfRnJhZ0Nvb3JkLnh5LCB1cmVjdFVuaWZvcm1fUzFfYzAuencpLCBmbG9hdDQodXJlY3RVbmlmb3JtX1MxX2MwLnh5LCBza19GcmFnQ29vcmQueHkpKSkpOwoJfQoJZWxzZSAKCXsKCQloYWxmNCBkaXN0czQgPSBzYXR1cmF0ZShoYWxmNCgxLjAsIDEuMCwgLTEuMCwgLTEuMCkgKiBoYWxmNChza19GcmFnQ29vcmQueHl4eSAtIHVyZWN0VW5pZm9ybV9TMV9jMCkpOwoJCWhhbGYyIGRpc3RzMiA9IChkaXN0czQueHkgKyBkaXN0czQuencpIC0gMS4wOwoJCWNvdmVyYWdlID0gZGlzdHMyLnggKiBkaXN0czIueTsKCX0KCWlmIChpbnQoMSkgPT0ga0ludmVyc2VGaWxsQldfUzFfYzAgfHwgaW50KDEpID09IGtJbnZlcnNlRmlsbEFBX1MxX2MwKSAKCXsKCQljb3ZlcmFnZSA9IDEuMCAtIGNvdmVyYWdlOwoJfQoJcmV0dXJuIGhhbGY0KGhhbGY0KGNvdmVyYWdlKSk7Cn0KaGFsZjQgQmxlbmRfUzEoaGFsZjQgX3NyYywgaGFsZjQgX2RzdCkgCnsKCXJldHVybiBibGVuZF9tb2R1bGF0ZShSZWN0X1MxX2MwKF9zcmMpLCBfc3JjKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgQml0bWFwVGV4dAoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHZpbkNvbG9yX1MwOwoJaGFsZjQgdGV4Q29sb3I7Cgl7CgkJdGV4Q29sb3IgPSBzYW1wbGUodVRleHR1cmVTYW1wbGVyXzBfUzAsIHZUZXh0dXJlQ29vcmRzX1MwKS5ycnJyOwoJfQoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSB0ZXhDb2xvcjsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IEJsZW5kX1MxKG91dHB1dENvdmVyYWdlX1MwLCBoYWxmNCgxKSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRfUzE7Cgl9Cn0KAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACgAAAGluUG9zaXRpb24AAAcAAABpbkNvbG9yAA8AAABpblRleHR1cmVDb29yZHMAAAAAAA==","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAHIBK2VD3EOCAAAAAABUXHIMAQAAAAWSQ4HO4SAAAAAMAAAAAAAAQAABANBBK3CICAAAEASHSVIGAAAAAAAAAAAEAABAAVAGSM7BYCAAAAA2CDQ53SKAIAABQAAAAAAACAAAEAUAF3OJAIAAAAAI6LVEYAAAAAAAAQAAAAFPJIMDXPJIBAAAGAAAAAAAAIAAAAAQIXNZERAAAAABDJMU3BAAAAAAAEAAAAAMQQAIAAAQGQQVNREBAAACAAAAAAQAKRC5HBSYCACAAAAAAAAAEAIRDJMU3BAAAAAAACAAAAAVTIMQ4RKBQAAAAAAAAAACAAIAIAAIAAAAC2BCEAQAAAAAAAAAAAMADAAAAAUAAAAAAAIIDA":"DAAAAExTS1NNAgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzBfYzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfN19TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzdfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxX2MwX2MwX2MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgAAAAEAAADKCgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gaGFsZjQgdXN0YXJ0X1MxX2MwX2MwX2MwX2MwOwp1bmlmb3JtIGhhbGY0IHVlbmRfUzFfYzBfYzBfYzBfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMV9jMF9jMF9jMTsKdW5pZm9ybSBoYWxmNCB1bGVmdEJvcmRlckNvbG9yX1MxX2MwX2MwOwp1bmlmb3JtIGhhbGY0IHVyaWdodEJvcmRlckNvbG9yX1MxX2MwX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzE7CnVuaWZvcm0gaGFsZiB1cmFuZ2VfUzE7CnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMTsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQgdmNvdmVyYWdlX1MwOwpub3BlcnNwZWN0aXZlIGluIGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfN19TMDsKaGFsZjQgU2luZ2xlSW50ZXJ2YWxDb2xvcml6ZXJfUzFfYzBfYzBfYzBfYzAoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSBfY29vcmRzOwoJcmV0dXJuIGhhbGY0KG1peCh1c3RhcnRfUzFfYzBfYzBfYzBfYzAsIHVlbmRfUzFfYzBfYzBfYzBfYzAsIGhhbGYoX3RtcF8xX2Nvb3Jkcy54KSkpOwp9CmhhbGY0IGNvbG9yX3hmb3JtX1MxX2MwX2MwX2MwKGZsb2F0NCBjb2xvcikgCnsKCWNvbG9yLnJnYiAqPSBjb2xvci5hOwoJcmV0dXJuIGhhbGY0KGNvbG9yKTsKfQpoYWxmNCBDb2xvclNwYWNlWGZvcm1fUzFfYzBfYzBfYzAoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCXJldHVybiBjb2xvcl94Zm9ybV9TMV9jMF9jMF9jMChTaW5nbGVJbnRlcnZhbENvbG9yaXplcl9TMV9jMF9jMF9jMF9jMChfaW5wdXQsIF9jb29yZHMpKTsKfQpoYWxmNCBMaW5lYXJMYXlvdXRfUzFfYzBfYzBfYzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8yX2luQ29sb3IgPSBfaW5wdXQ7CglmbG9hdDIgX3RtcF8zX2Nvb3JkcyA9IHZUcmFuc2Zvcm1lZENvb3Jkc183X1MwOwoJcmV0dXJuIGhhbGY0KGhhbGY0KGhhbGYoX3RtcF8zX2Nvb3Jkcy54KSArIDFlLTA1LCAxLjAsIDAuMCwgMC4wKSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBMaW5lYXJMYXlvdXRfUzFfYzBfYzBfYzFfYzAoX2lucHV0KTsKfQpoYWxmNCBDbGFtcGVkR3JhZGllbnRfUzFfYzBfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF80X2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmNCB0ID0gTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MxKF90bXBfNF9pbkNvbG9yKTsKCWhhbGY0IG91dENvbG9yOwoJaWYgKCFib29sKGludCgxKSkgJiYgdC55IDwgMC4wKSAKCXsKCQlvdXRDb2xvciA9IGhhbGY0KDAuMCk7Cgl9CgllbHNlIGlmICh0LnggPCAwLjApIAoJewoJCW91dENvbG9yID0gdWxlZnRCb3JkZXJDb2xvcl9TMV9jMF9jMDsKCX0KCWVsc2UgaWYgKHQueCA+IDEuMCkgCgl7CgkJb3V0Q29sb3IgPSB1cmlnaHRCb3JkZXJDb2xvcl9TMV9jMF9jMDsKCX0KCWVsc2UgCgl7CgkJb3V0Q29sb3IgPSBDb2xvclNwYWNlWGZvcm1fUzFfYzBfYzBfYzAoX3RtcF80X2luQ29sb3IsIGZsb2F0MihoYWxmMih0LngsIDAuMCkpKTsKCX0KCXJldHVybiBoYWxmNChvdXRDb2xvcik7Cn0KaGFsZjQgRGlzYWJsZUNvdmVyYWdlQXNBbHBoYV9TMV9jMChoYWxmNCBfaW5wdXQpIAp7CglfaW5wdXQgPSBDbGFtcGVkR3JhZGllbnRfUzFfYzBfYzAoX2lucHV0KTsKCWhhbGY0IF90bXBfNV9pbkNvbG9yID0gX2lucHV0OwoJcmV0dXJuIGhhbGY0KF9pbnB1dCk7Cn0KaGFsZjQgVGV4dHVyZUVmZmVjdF9TMV9jMV9jMChoYWxmNCBfaW5wdXQsIGZsb2F0MiBfY29vcmRzKSAKewoJcmV0dXJuIHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMSwgX2Nvb3JkcykuMDAwcjsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzFfYzEoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCXJldHVybiBUZXh0dXJlRWZmZWN0X1MxX2MxX2MwKF9pbnB1dCwgZmxvYXQzeDIodW1hdHJpeF9TMV9jMSkgKiBfY29vcmRzLnh5MSk7Cn0KaGFsZjQgRGl0aGVyX1MxKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfNl9pbkNvbG9yID0gX2lucHV0OwoJaGFsZjQgY29sb3IgPSBEaXNhYmxlQ292ZXJhZ2VBc0FscGhhX1MxX2MwKF90bXBfNl9pbkNvbG9yKTsKCWhhbGYgdmFsdWUgPSBNYXRyaXhFZmZlY3RfUzFfYzEoX3RtcF82X2luQ29sb3IsIHNrX0ZyYWdDb29yZC54eSkudyAtIDAuNTsKCXJldHVybiBoYWxmNChoYWxmNChjbGFtcChjb2xvci54eXogKyB2YWx1ZSAqIHVyYW5nZV9TMSwgMC4wLCBjb2xvci53KSwgY29sb3IudykpOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7CglmbG9hdCBjb3ZlcmFnZSA9IHZjb3ZlcmFnZV9TMDsKCWhhbGY0IG91dHB1dENvdmVyYWdlX1MwID0gaGFsZjQoY292ZXJhZ2UpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gRGl0aGVyX1MxKG91dHB1dENvbG9yX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSAoaGFsZjQoMS4wKSAtIG91dHB1dF9TMSkgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAHIBIA5HZ2CAAAAAAAYAAAAAAAAAQAAAAERRAAAAAAAABAAAAABYECBQAAAAAAAABAAAAAJAIAAIAAAAAKBBIAIIDAAAAAAAAAAADGAAAAAAAEAAAAAIDEAA":"DAAAAExTS1POAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzA7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfM19TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfM19TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzFfYzApICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAAAAAAAgQwAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzBfYzBfYzA7CnVuaWZvcm0gaGFsZjR4NCB1Y29lZmZpY2llbnRzX1MxX2MwX2MwOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzFfYzA7CnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMTsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18zX1MwOwpoYWxmNCBUZXh0dXJlRWZmZWN0X1MxX2MwX2MwX2MwX2MwKGhhbGY0IF9pbnB1dCwgZmxvYXQyIF9jb29yZHMpIAp7CglyZXR1cm4gc2FtcGxlKHVUZXh0dXJlU2FtcGxlcl8wX1MxLCBfY29vcmRzKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoaGFsZjQgX2lucHV0LCBmbG9hdDIgX2Nvb3JkcykgCnsKCXJldHVybiBUZXh0dXJlRWZmZWN0X1MxX2MwX2MwX2MwX2MwKF9pbnB1dCwgZmxvYXQzeDIodW1hdHJpeF9TMV9jMF9jMF9jMCkgKiBfY29vcmRzLnh5MSk7Cn0KaGFsZjQgQmljdWJpY19TMV9jMF9jMChoYWxmNCBfaW5wdXQpIAp7CglmbG9hdDIgY29vcmQgPSB2VHJhbnNmb3JtZWRDb29yZHNfM19TMCAtIGZsb2F0MigwLjUpOwoJaGFsZjIgZiA9IGhhbGYyKGZyYWN0KGNvb3JkKSk7Cgljb29yZCArPSAwLjUgLSBmOwoJaGFsZjQgd3ggPSB1Y29lZmZpY2llbnRzX1MxX2MwX2MwICogaGFsZjQoMS4wLCBmLngsIGYueCAqIGYueCwgZi54ICogZi54ICogZi54KTsKCWhhbGY0IHd5ID0gdWNvZWZmaWNpZW50c19TMV9jMF9jMCAqIGhhbGY0KDEuMCwgZi55LCBmLnkgKiBmLnksIGYueSAqIGYueSAqIGYueSk7CgloYWxmNCByb3dDb2xvcnNbNF07Cglyb3dDb2xvcnNbMF0gPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBjb29yZCArIGZsb2F0MigtMSwgLTEpKTsKCXJvd0NvbG9yc1sxXSA9IE1hdHJpeEVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGNvb3JkICsgZmxvYXQyKDAsIC0xKSk7Cglyb3dDb2xvcnNbMl0gPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBjb29yZCArIGZsb2F0MigxLCAtMSkpOwoJcm93Q29sb3JzWzNdID0gTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MwKF9pbnB1dCwgY29vcmQgKyBmbG9hdDIoMiwgLTEpKTsKCWhhbGY0IHMwID0gd3gueCAqIHJvd0NvbG9yc1swXSArIHd4LnkgKiByb3dDb2xvcnNbMV0gKyB3eC56ICogcm93Q29sb3JzWzJdICsgd3gudyAqIHJvd0NvbG9yc1szXTsKCXJvd0NvbG9yc1swXSA9IE1hdHJpeEVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGNvb3JkICsgZmxvYXQyKC0xLCAwKSk7Cglyb3dDb2xvcnNbMV0gPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBjb29yZCArIGZsb2F0MigwLCAwKSk7Cglyb3dDb2xvcnNbMl0gPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBjb29yZCArIGZsb2F0MigxLCAwKSk7Cglyb3dDb2xvcnNbM10gPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBjb29yZCArIGZsb2F0MigyLCAwKSk7CgloYWxmNCBzMSA9IHd4LnggKiByb3dDb2xvcnNbMF0gKyB3eC55ICogcm93Q29sb3JzWzFdICsgd3gueiAqIHJvd0NvbG9yc1syXSArIHd4LncgKiByb3dDb2xvcnNbM107Cglyb3dDb2xvcnNbMF0gPSBNYXRyaXhFZmZlY3RfUzFfYzBfYzBfYzAoX2lucHV0LCBjb29yZCArIGZsb2F0MigtMSwgMSkpOwoJcm93Q29sb3JzWzFdID0gTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MwKF9pbnB1dCwgY29vcmQgKyBmbG9hdDIoMCwgMSkpOwoJcm93Q29sb3JzWzJdID0gTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MwKF9pbnB1dCwgY29vcmQgKyBmbG9hdDIoMSwgMSkpOwoJcm93Q29sb3JzWzNdID0gTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MwKF9pbnB1dCwgY29vcmQgKyBmbG9hdDIoMiwgMSkpOwoJaGFsZjQgczIgPSB3eC54ICogcm93Q29sb3JzWzBdICsgd3gueSAqIHJvd0NvbG9yc1sxXSArIHd4LnogKiByb3dDb2xvcnNbMl0gKyB3eC53ICogcm93Q29sb3JzWzNdOwoJcm93Q29sb3JzWzBdID0gTWF0cml4RWZmZWN0X1MxX2MwX2MwX2MwKF9pbnB1dCwgY29vcmQgKyBmbG9hdDIoLTEsIDIpKTsKCXJvd0NvbG9yc1sxXSA9IE1hdHJpeEVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGNvb3JkICsgZmxvYXQyKDAsIDIpKTsKCXJvd0NvbG9yc1syXSA9IE1hdHJpeEVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGNvb3JkICsgZmxvYXQyKDEsIDIpKTsKCXJvd0NvbG9yc1szXSA9IE1hdHJpeEVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGNvb3JkICsgZmxvYXQyKDIsIDIpKTsKCWhhbGY0IHMzID0gd3gueCAqIHJvd0NvbG9yc1swXSArIHd4LnkgKiByb3dDb2xvcnNbMV0gKyB3eC56ICogcm93Q29sb3JzWzJdICsgd3gudyAqIHJvd0NvbG9yc1szXTsKCWhhbGY0IGJpY3ViaWNDb2xvciA9IHd5LnggKiBzMCArIHd5LnkgKiBzMSArIHd5LnogKiBzMiArIHd5LncgKiBzMzsKCWJpY3ViaWNDb2xvci5hID0gc2F0dXJhdGUoYmljdWJpY0NvbG9yLmEpOwoJYmljdWJpY0NvbG9yLnJnYiA9IG1heChoYWxmMygwLjApLCBtaW4oYmljdWJpY0NvbG9yLnJnYiwgYmljdWJpY0NvbG9yLmFhYSkpOwoJcmV0dXJuIGJpY3ViaWNDb2xvcjsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIEJpY3ViaWNfUzFfYzBfYzAoX2lucHV0KTsKfQpoYWxmNCBEaXNhYmxlQ292ZXJhZ2VBc0FscGhhX1MxKGhhbGY0IF9pbnB1dCkgCnsKCV9pbnB1dCA9IE1hdHJpeEVmZmVjdF9TMV9jMChfaW5wdXQpOwoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CglyZXR1cm4gaGFsZjQoX2lucHV0KTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJY29uc3QgaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNCgxKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IERpc2FibGVDb3ZlcmFnZUFzQWxwaGFfUzEob3V0cHV0Q29sb3JfUzApOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dENvdmVyYWdlX1MwOwoJfQp9CgAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAACAAAAHBvc2l0aW9uBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA=","B2AAQAAABQAAIAABBYAAB7777777777774ABICAAAAAAAAAAAAAABGABAAAAAEAAAAAIBEABAAAAA":"DAAAAExTS1NZAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0OwppbiBmbG9hdDIgaW5Qb3NpdGlvbjsKaW4gaGFsZiBpbkNvdmVyYWdlOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmIHZpbkNvdmVyYWdlX1MwOwp2b2lkIG1haW4oKSAKewoJLy8gUHJpbWl0aXZlIFByb2Nlc3NvciBEZWZhdWx0R2VvbWV0cnlQcm9jZXNzb3IKCWZsb2F0MiBfdG1wXzFfaW5Qb3NpdGlvbiA9IGluUG9zaXRpb247Cgl2aW5Db3ZlcmFnZV9TMCA9IGluQ292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IF90bXBfMV9pblBvc2l0aW9uLnh5MDE7Cn0KAAAAAAAAAJgBAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKdW5pZm9ybSBoYWxmNCB1Q29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gaGFsZiB2aW5Db3ZlcmFnZV9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFN0YWdlIDAsIERlZmF1bHRHZW9tZXRyeVByb2Nlc3NvcgoJaGFsZjQgb3V0cHV0Q29sb3JfUzA7CglvdXRwdXRDb2xvcl9TMCA9IHVDb2xvcl9TMDsKCWhhbGYgYWxwaGEgPSAxLjA7CglhbHBoYSA9IHZpbkNvdmVyYWdlX1MwOwoJaGFsZjQgb3V0cHV0Q292ZXJhZ2VfUzAgPSBoYWxmNChhbHBoYSk7Cgl7CgkJLy8gWGZlciBQcm9jZXNzb3I6IFBvcnRlciBEdWZmCgkJc2tfRnJhZ0NvbG9yID0gb3V0cHV0Q29sb3JfUzAgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAoAAABpblBvc2l0aW9uAAAKAAAAaW5Db3ZlcmFnZQAAAAAAAA==","GZIAAAAAABIAAGAAAQ4AAAH477776R24EAAAIOBQAD6P7777777777YDAAAAAAAAAAAJIBBKQPNFTIACAAADQOAIAAAAAWFBZKQHMFVIAAAAADQOAIAAAACI6DQCAAAAACQIKACCAYAA4DQAAAAAAZQAAAAAABAAAAACAZAAAAAAA":"DAAAAExTS1PIAQAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gaGFsZjQgY29sb3I7CmluIGZsb2F0MiBsb2NhbENvb3JkOwpub3BlcnNwZWN0aXZlIG91dCBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgl2Y29sb3JfUzAgPSBjb2xvcjsKCXNrX1Bvc2l0aW9uID0gcG9zaXRpb24ueHkwMTsKCXsKCQl2VHJhbnNmb3JtZWRDb29yZHNfMl9TMCA9IGZsb2F0M3gyKHVtYXRyaXhfUzEpICogbG9jYWxDb29yZC54eTE7Cgl9Cn0KAAAAAAkJAAAjZXh0ZW5zaW9uIEdMX05WX3NoYWRlcl9ub3BlcnNwZWN0aXZlX2ludGVycG9sYXRpb246IHJlcXVpcmUKY29uc3QgaW50IGtNYXhMb29wTGltaXRfUzFfYzAgPSAzOwp1bmlmb3JtIGhhbGY0IHVib3JkZXJfUzFfYzBfYzBfYzA7CnVuaWZvcm0gZmxvYXQ0IHVzdWJzZXRfUzFfYzBfYzBfYzA7CnVuaWZvcm0gZmxvYXQyIHVpZGltc19TMV9jMF9jMF9jMDsKdW5pZm9ybSBmbG9hdDN4MyB1bWF0cml4X1MxX2MwX2MwOwp1bmlmb3JtIGhhbGY0IHVrZXJuZWxfUzFfYzBbN107CnVuaWZvcm0gaGFsZjQgdW9mZnNldHNfUzFfYzBbMTRdOwp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CnNhbXBsZXIyRCB1VGV4dHVyZVNhbXBsZXJfMF9TMTsKbm9wZXJzcGVjdGl2ZSBpbiBoYWxmNCB2Y29sb3JfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwpoYWxmNCBUZXh0dXJlRWZmZWN0X1MxX2MwX2MwX2MwKGhhbGY0IF9pbnB1dCwgZmxvYXQyIF9jb29yZHMpIAp7CglmbG9hdDIgaW5Db29yZCA9IF9jb29yZHM7CglmbG9hdDIgc3Vic2V0Q29vcmQ7CglzdWJzZXRDb29yZC54ID0gaW5Db29yZC54OwoJc3Vic2V0Q29vcmQueSA9IGluQ29vcmQueTsKCWZsb2F0MiBjbGFtcGVkQ29vcmQ7CgljbGFtcGVkQ29vcmQgPSBzdWJzZXRDb29yZDsKCWhhbGY0IHRleHR1cmVDb2xvciA9IHNhbXBsZSh1VGV4dHVyZVNhbXBsZXJfMF9TMSwgKGNsYW1wZWRDb29yZCkgKiB1aWRpbXNfUzFfYzBfYzBfYzApOwoJZmxvYXQgc25hcHBlZFggPSBmbG9vcihpbkNvb3JkLnggKyAwLjAwMSkgKyAwLjU7CglpZiAoc25hcHBlZFggPCB1c3Vic2V0X1MxX2MwX2MwX2MwLnggfHwgc25hcHBlZFggPiB1c3Vic2V0X1MxX2MwX2MwX2MwLnopIAoJewoJCXRleHR1cmVDb2xvciA9IHVib3JkZXJfUzFfYzBfYzBfYzA7Cgl9CglmbG9hdCBzbmFwcGVkWSA9IGZsb29yKGluQ29vcmQueSArIDAuMDAxKSArIDAuNTsKCWlmIChzbmFwcGVkWSA8IHVzdWJzZXRfUzFfYzBfYzBfYzAueSB8fCBzbmFwcGVkWSA+IHVzdWJzZXRfUzFfYzBfYzBfYzAudykgCgl7CgkJdGV4dHVyZUNvbG9yID0gdWJvcmRlcl9TMV9jMF9jMF9jMDsKCX0KCXJldHVybiB0ZXh0dXJlQ29sb3I7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxX2MwX2MwKGhhbGY0IF9pbnB1dCwgZmxvYXQyIF9jb29yZHMpIAp7CglyZXR1cm4gVGV4dHVyZUVmZmVjdF9TMV9jMF9jMF9jMChfaW5wdXQsIGZsb2F0M3gyKHVtYXRyaXhfUzFfYzBfYzApICogX2Nvb3Jkcy54eTEpOwp9CmhhbGY0IHJ1bnRpbWVfc2hhZGVyX1MxX2MwKGhhbGY0IF9pbnB1dCkgCnsKCWhhbGY0IF90bXBfMF9pbkNvbG9yID0gX2lucHV0OwoJZmxvYXQyIF90bXBfMV9jb29yZHMgPSB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKCWhhbGY0IHN1bSA9IGhhbGY0KDAuMCk7Cglmb3IgKGludCBpID0gMDtpIDwga01heExvb3BMaW1pdF9TMV9jMDsgKytpKSAKCXsKCQloYWxmNCBrID0gdWtlcm5lbF9TMV9jMFtpXTsKCQloYWxmNCBvID0gdW9mZnNldHNfUzFfYzBbMiAqIGldOwoJCXN1bSArPSBrLnggKiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX3RtcF8wX2luQ29sb3IsIF90bXBfMV9jb29yZHMgKyBmbG9hdDIoby54eSkpOwoJCXN1bSArPSBrLnkgKiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX3RtcF8wX2luQ29sb3IsIF90bXBfMV9jb29yZHMgKyBmbG9hdDIoby56dykpOwoJCW8gPSB1b2Zmc2V0c19TMV9jMFsyICogaSArIDFdOwoJCXN1bSArPSBrLnogKiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX3RtcF8wX2luQ29sb3IsIF90bXBfMV9jb29yZHMgKyBmbG9hdDIoby54eSkpOwoJCXN1bSArPSBrLncgKiBNYXRyaXhFZmZlY3RfUzFfYzBfYzAoX3RtcF8wX2luQ29sb3IsIF90bXBfMV9jb29yZHMgKyBmbG9hdDIoby56dykpOwoJfQoJcmV0dXJuIGhhbGY0KHN1bSk7Cn0KaGFsZjQgTWF0cml4RWZmZWN0X1MxKGhhbGY0IF9pbnB1dCkgCnsKCXJldHVybiBydW50aW1lX3NoYWRlcl9TMV9jMChfaW5wdXQpOwp9CnZvaWQgbWFpbigpIAp7CgkvLyBTdGFnZSAwLCBRdWFkUGVyRWRnZUFBR2VvbWV0cnlQcm9jZXNzb3IKCWhhbGY0IG91dHB1dENvbG9yX1MwOwoJb3V0cHV0Q29sb3JfUzAgPSB2Y29sb3JfUzA7Cgljb25zdCBoYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KDEpOwoJaGFsZjQgb3V0cHV0X1MxOwoJb3V0cHV0X1MxID0gTWF0cml4RWZmZWN0X1MxKG91dHB1dENvbG9yX1MwKTsKCXsKCQkvLyBYZmVyIFByb2Nlc3NvcjogUG9ydGVyIER1ZmYKCQlza19GcmFnQ29sb3IgPSBvdXRwdXRfUzEgKiBvdXRwdXRDb3ZlcmFnZV9TMDsKCX0KfQoAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAgAAABwb3NpdGlvbgUAAABjb2xvcgAAAAoAAABsb2NhbENvb3JkAAAAAAAA","GZIACAAAABQAAGAAAQ4AAAAAGQQAARC4GAAAIOCAAD6P7777777777YDAAAAAAAAAAAJQBBYGQ467YIAAAAAAQAAAAAMACTRNBZN5QYBAAAAAAAAAAAIAALIAAAAB4FJEIEKOAAAAAMAAAAAUAAQAADAWB7EXCYCAAAGAAAAAAAACAAAQAK7DKJCBCTQAAAADAAAAAAAAAAAAYCADIAAAAAG5O33IKAAAAAAMAAAAAIAAAAAABMJDQP2FUWQUAAAQAAQAAAAAAAAAADGAAAAAAAEAAAAAIDEAAAAAAA":"DAAAAExTS1M7AgAAI2V4dGVuc2lvbiBHTF9OVl9zaGFkZXJfbm9wZXJzcGVjdGl2ZV9pbnRlcnBvbGF0aW9uOiByZXF1aXJlCnVuaWZvcm0gZmxvYXQ0IHNrX1JUQWRqdXN0Owp1bmlmb3JtIGZsb2F0M3gzIHVtYXRyaXhfUzE7CmluIGZsb2F0MiBwb3NpdGlvbjsKaW4gZmxvYXQgY292ZXJhZ2U7CmluIGhhbGY0IGNvbG9yOwppbiBmbG9hdDIgbG9jYWxDb29yZDsKbm9wZXJzcGVjdGl2ZSBvdXQgaGFsZjQgdmNvbG9yX1MwOwpub3BlcnNwZWN0aXZlIG91dCBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgb3V0IGZsb2F0MiB2VHJhbnNmb3JtZWRDb29yZHNfMl9TMDsKdm9pZCBtYWluKCkgCnsKCS8vIFByaW1pdGl2ZSBQcm9jZXNzb3IgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCglmbG9hdDIgcG9zaXRpb24gPSBwb3NpdGlvbi54eTsKCXZjb2xvcl9TMCA9IGNvbG9yOwoJdmNvdmVyYWdlX1MwID0gY292ZXJhZ2U7Cglza19Qb3NpdGlvbiA9IHBvc2l0aW9uLnh5MDE7Cgl7CgkJdlRyYW5zZm9ybWVkQ29vcmRzXzJfUzAgPSBmbG9hdDN4Mih1bWF0cml4X1MxKSAqIGxvY2FsQ29vcmQueHkxOwoJfQp9CgABAAAAxiIAACNleHRlbnNpb24gR0xfTlZfc2hhZGVyX25vcGVyc3BlY3RpdmVfaW50ZXJwb2xhdGlvbjogcmVxdWlyZQpmbG9hdDQgZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzA7CmZsb2F0NCBmcmFnQ29sb3JfUzFfYzA7CmZsb2F0IHVfYWxwaGFfUzFfYzA7CmZsb2F0IHVfc3BhcmtsZV9hbHBoYV9TMV9jMDsKZmxvYXQgdV9ibHVyX1MxX2MwOwpmbG9hdCB1X3JhZGl1c19zY2FsZV9TMV9jMDsKY29uc3QgaW50IGtGaWxsQldfUzJfYzAgPSAwOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQldfUzJfYzAgPSAyOwpjb25zdCBpbnQga0ludmVyc2VGaWxsQUFfUzJfYzAgPSAzOwpjb25zdCBpbnQga0ZpbGxBQV9TMl9jMV9jMCA9IDE7CmNvbnN0IGludCBrSW52ZXJzZUZpbGxCV19TMl9jMV9jMCA9IDI7CmNvbnN0IGludCBrSW52ZXJzZUZpbGxBQV9TMl9jMV9jMCA9IDM7CnVuaWZvcm0gZmxvYXQ0IHVfY29sb3JfUzFfYzA7CnVuaWZvcm0gZmxvYXQ0IHVfY29tcG9zaXRlXzFfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2VudGVyX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVfbWF4X3JhZGl1c19TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yZXNvbHV0aW9uX3NjYWxlX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X25vaXNlX3NjYWxlX1MxX2MwOwp1bmlmb3JtIGZsb2F0IHVfbm9pc2VfcGhhc2VfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfY2lyY2xlMV9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9jaXJjbGUyX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X2NpcmNsZTNfUzFfYzA7CnVuaWZvcm0gZmxvYXQyIHVfcm90YXRpb24xX1MxX2MwOwp1bmlmb3JtIGZsb2F0MiB1X3JvdGF0aW9uMl9TMV9jMDsKdW5pZm9ybSBmbG9hdDIgdV9yb3RhdGlvbjNfUzFfYzA7CnVuaWZvcm0gZmxvYXQzeDMgdW1hdHJpeF9TMTsKdW5pZm9ybSBmbG9hdDQgdXJlY3RVbmlmb3JtX1MyX2MwOwp1bmlmb3JtIGZsb2F0NCB1Y2lyY2xlX1MyX2MxX2MwOwpub3BlcnNwZWN0aXZlIGluIGhhbGY0IHZjb2xvcl9TMDsKbm9wZXJzcGVjdGl2ZSBpbiBmbG9hdCB2Y292ZXJhZ2VfUzA7Cm5vcGVyc3BlY3RpdmUgaW4gZmxvYXQyIHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwpmbG9hdDIgRkxUX2ZsdXR0ZXJfbG9jYWxfRmx1dHRlckZyYWdDb29yZF9TMV9jMCgpOwpmbG9hdDJ4MiBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChmbG9hdDIgcmFkKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgYmx1cik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKGZsb2F0MiByZXNvbHV0aW9uLCBpbm91dCBmbG9hdDIgcCwgZmxvYXQyIHh5LCBmbG9hdDIgcm90YXRpb24sIGZsb2F0IGNlbGxfZGlhbWV0ZXIpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKGZsb2F0MiB1dik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfcmluZ19TMV9jMChmbG9hdDIgdXYsIGZsb2F0MiB4eSwgZmxvYXQgcmFkaXVzLCBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGJsdXIpOwpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90cmlhbmdsZV9ub2lzZV9TMV9jMChpbm91dCBmbG9hdDIgbik7CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChmbG9hdCB2LCBmbG9hdCBsLCBmbG9hdCBoKTsKZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc3BhcmtsZV9TMV9jMChmbG9hdDIgdXYsIGZsb2F0IHQpOwp2b2lkIEZMVF9tYWluX1MxX2MwKCk7CmZsb2F0MiBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCkgCnsKCXJldHVybiBmbHV0dGVyX0ZyYWdDb29yZF9TMV9jMC54eTsKfQpmbG9hdDJ4MiBGTFRfZmx1dHRlcl9sb2NhbF9yb3RhdGUyZF9TMV9jMChmbG9hdDIgcmFkKSAKewoJcmV0dXJuIGZsb2F0MngyKHJhZC54LCAtcmFkLnksIHJhZC55LCByYWQueCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9jaXJjbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdDIgeHksIGZsb2F0IHJhZGl1cywgZmxvYXQgYmx1cikgCnsKCWZsb2F0IGJsdXJfaGFsZiA9IGJsdXIgKiAwLjU7CglmbG9hdCBkID0gZGlzdGFuY2UodXYsIHh5KTsKCXJldHVybiAxLjAgLSBzbW9vdGhzdGVwKDEuMCAtIGJsdXJfaGFsZiwgMS4wICsgYmx1cl9oYWxmLCBkIC8gcmFkaXVzKTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChmbG9hdDIgcmVzb2x1dGlvbiwgaW5vdXQgZmxvYXQyIHAsIGZsb2F0MiB4eSwgZmxvYXQyIHJvdGF0aW9uLCBmbG9hdCBjZWxsX2RpYW1ldGVyKSAKewoJZmxvYXQyIHBhcmFtID0gcm90YXRpb247CglwID0gRkxUX2ZsdXR0ZXJfbG9jYWxfcm90YXRlMmRfUzFfYzAocGFyYW0pICogKHh5IC0gcCkgKyB4eTsKCXAgPSBtb2QocCwgZmxvYXQyKGNlbGxfZGlhbWV0ZXIpKSAvIHJlc29sdXRpb247CglmbG9hdCBjZWxsX3V2ID0gKGNlbGxfZGlhbWV0ZXIgLyByZXNvbHV0aW9uLnkpICogMC41OwoJZmxvYXQgciA9IDAuNjUgKiBjZWxsX3V2OwoJZmxvYXQyIHBhcmFtXzEgPSBwOwoJZmxvYXQyIHBhcmFtXzIgPSBmbG9hdDIoY2VsbF91dik7CglmbG9hdCBwYXJhbV8zID0gcjsKCWZsb2F0IHBhcmFtXzQgPSByICogNTAuMDsKCXJldHVybiBGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zLCBwYXJhbV80KTsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90dXJidWxlbmNlX1MxX2MwKGZsb2F0MiB1dikgCnsKCWZsb2F0MiB1dl9zY2FsZSA9IHV2ICogZmxvYXQyKDAuOCk7CglmbG9hdDIgcGFyYW0gPSBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbV8xID0gdXZfc2NhbGU7CglmbG9hdDIgcGFyYW1fMiA9IHVfY2lyY2xlMV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8zID0gdV9yb3RhdGlvbjFfUzFfYzA7CglmbG9hdCBwYXJhbV80ID0gMC4xNzsKCWZsb2F0IF8zMTkgPSBGTFRfZmx1dHRlcl9sb2NhbF9jaXJjbGVfZ3JpZF9TMV9jMChwYXJhbSwgcGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMywgcGFyYW1fNCk7CglmbG9hdCBnMSA9IF8zMTk7CglmbG9hdDIgcGFyYW1fNSA9IGZsb2F0MigwLjgpOwoJZmxvYXQyIHBhcmFtXzYgPSB1dl9zY2FsZTsKCWZsb2F0MiBwYXJhbV83ID0gdV9jaXJjbGUyX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzggPSB1X3JvdGF0aW9uMl9TMV9jMDsKCWZsb2F0IHBhcmFtXzkgPSAwLjI7CglmbG9hdCBfMzMxID0gRkxUX2ZsdXR0ZXJfbG9jYWxfY2lyY2xlX2dyaWRfUzFfYzAocGFyYW1fNSwgcGFyYW1fNiwgcGFyYW1fNywgcGFyYW1fOCwgcGFyYW1fOSk7CglmbG9hdCBnMiA9IF8zMzE7CglmbG9hdDIgcGFyYW1fMTAgPSBmbG9hdDIoMC44KTsKCWZsb2F0MiBwYXJhbV8xMSA9IHV2X3NjYWxlOwoJZmxvYXQyIHBhcmFtXzEyID0gdV9jaXJjbGUzX1MxX2MwOwoJZmxvYXQyIHBhcmFtXzEzID0gdV9yb3RhdGlvbjNfUzFfYzA7CglmbG9hdCBwYXJhbV8xNCA9IDAuMjc1OwoJZmxvYXQgXzM0NCA9IEZMVF9mbHV0dGVyX2xvY2FsX2NpcmNsZV9ncmlkX1MxX2MwKHBhcmFtXzEwLCBwYXJhbV8xMSwgcGFyYW1fMTIsIHBhcmFtXzEzLCBwYXJhbV8xNCk7CglmbG9hdCBnMyA9IF8zNDQ7CglmbG9hdCB2ID0gKChnMSAqIGcxICsgZzIpIC0gZzMpICogMC41OwoJcmV0dXJuIGNsYW1wKDAuNDUgKyAwLjggKiB2LCAwLjAsIDEuMCk7Cn0KZmxvYXQgRkxUX2ZsdXR0ZXJfbG9jYWxfc29mdF9yaW5nX1MxX2MwKGZsb2F0MiB1diwgZmxvYXQyIHh5LCBmbG9hdCByYWRpdXMsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgYmx1cikgCnsKCWZsb2F0MiBwYXJhbSA9IHV2OwoJZmxvYXQyIHBhcmFtXzEgPSB4eTsKCWZsb2F0IHBhcmFtXzIgPSByYWRpdXMgKyB0aGlja25lc3M7CglmbG9hdCBwYXJhbV8zID0gYmx1cjsKCWZsb2F0IGNpcmNsZV9vdXRlciA9IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtLCBwYXJhbV8xLCBwYXJhbV8yLCBwYXJhbV8zKTsKCWZsb2F0MiBwYXJhbV80ID0gdXY7CglmbG9hdDIgcGFyYW1fNSA9IHh5OwoJZmxvYXQgcGFyYW1fNiA9IG1heChyYWRpdXMgLSB0aGlja25lc3MsIDAuMCk7CglmbG9hdCBwYXJhbV83ID0gYmx1cjsKCWZsb2F0IGNpcmNsZV9pbm5lciA9IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfY2lyY2xlX1MxX2MwKHBhcmFtXzQsIHBhcmFtXzUsIHBhcmFtXzYsIHBhcmFtXzcpOwoJcmV0dXJuIGNsYW1wKGNpcmNsZV9vdXRlciAtIGNpcmNsZV9pbm5lciwgMC4wLCAxLjApOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3RyaWFuZ2xlX25vaXNlX1MxX2MwKGlub3V0IGZsb2F0MiBuKSAKewoJbiA9IGZyYWN0KG4gKiBmbG9hdDIoNS4zOTg3LCA1LjQ0MjEpKTsKCW4gKz0gZmxvYXQyKGRvdChuLnl4LCBuICsgZmxvYXQyKDIxLjUzNTEsIDE0LjMxMzcpKSk7CglmbG9hdCB4eSA9IG4ueCAqIG4ueTsKCXJldHVybiAoZnJhY3QoeHkgKiA5NS40MzA3KSArIGZyYWN0KHh5ICogNzUuMDQ5NjEpKSAtIDEuMDsKfQpmbG9hdCBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAoZmxvYXQgdiwgZmxvYXQgbCwgZmxvYXQgaCkgCnsKCXJldHVybiBzdGVwKGwsIHYpICogKDEuMCAtIHN0ZXAoaCwgdikpOwp9CmZsb2F0IEZMVF9mbHV0dGVyX2xvY2FsX3NwYXJrbGVfUzFfYzAoZmxvYXQyIHV2LCBmbG9hdCB0KSAKewoJZmxvYXQyIHBhcmFtID0gdXY7CglmbG9hdCBfMjQyID0gRkxUX2ZsdXR0ZXJfbG9jYWxfdHJpYW5nbGVfbm9pc2VfUzFfYzAocGFyYW0pOwoJZmxvYXQgbiA9IF8yNDI7CglmbG9hdCBwYXJhbV8xID0gbjsKCWZsb2F0IHBhcmFtXzIgPSAwLjA7CglmbG9hdCBwYXJhbV8zID0gMC4wNTsKCWZsb2F0IHMgPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fMSwgcGFyYW1fMiwgcGFyYW1fMyk7CglmbG9hdCBwYXJhbV80ID0gbiArIHNpbigzLjE0MTU5Mjc0ICogKHQgKyAwLjM1KSk7CglmbG9hdCBwYXJhbV81ID0gMC4xOwoJZmxvYXQgcGFyYW1fNiA9IDAuMTU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV80LCBwYXJhbV81LCBwYXJhbV82KTsKCWZsb2F0IHBhcmFtXzcgPSBuICsgc2luKDMuMTQxNTkyNzQgKiAodCArIDAuNykpOwoJZmxvYXQgcGFyYW1fOCA9IDAuMjsKCWZsb2F0IHBhcmFtXzkgPSAwLjI1OwoJcyArPSBGTFRfZmx1dHRlcl9sb2NhbF90aHJlc2hvbGRfUzFfYzAocGFyYW1fNywgcGFyYW1fOCwgcGFyYW1fOSk7CglmbG9hdCBwYXJhbV8xMCA9IG4gKyBzaW4oMy4xNDE1OTI3NCAqICh0ICsgMS4wNSkpOwoJZmxvYXQgcGFyYW1fMTEgPSAwLjM7CglmbG9hdCBwYXJhbV8xMiA9IDAuMzU7CglzICs9IEZMVF9mbHV0dGVyX2xvY2FsX3RocmVzaG9sZF9TMV9jMChwYXJhbV8xMCwgcGFyYW1fMTEsIHBhcmFtXzEyKTsKCXJldHVybiBjbGFtcChzLCAwLjAsIDEuMCkgKiAwLjU1Owp9CnZvaWQgRkxUX21haW5fUzFfYzAoKSAKewoJdV9hbHBoYV9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAueDsKCXVfc3BhcmtsZV9hbHBoYV9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAueTsKCXVfYmx1cl9TMV9jMCA9IHVfY29tcG9zaXRlXzFfUzFfYzAuejsKCXVfcmFkaXVzX3NjYWxlX1MxX2MwID0gdV9jb21wb3NpdGVfMV9TMV9jMC53OwoJZmxvYXQyIHAgPSBGTFRfZmx1dHRlcl9sb2NhbF9GbHV0dGVyRnJhZ0Nvb3JkX1MxX2MwKCk7CglmbG9hdDIgdXZfMSA9IHAgKiB1X3Jlc29sdXRpb25fc2NhbGVfUzFfYzA7CglmbG9hdDIgZGVuc2l0eV91diA9IHV2XzEgLSBtb2QocCwgdV9ub2lzZV9zY2FsZV9TMV9jMCk7CglmbG9hdCByYWRpdXMgPSB1X21heF9yYWRpdXNfUzFfYzAgKiB1X3JhZGl1c19zY2FsZV9TMV9jMDsKCWZsb2F0MiBwYXJhbV8xMyA9IHV2XzE7CglmbG9hdCB0dXJidWxlbmNlID0gRkxUX2ZsdXR0ZXJfbG9jYWxfdHVyYnVsZW5jZV9TMV9jMChwYXJhbV8xMyk7CglmbG9hdDIgcGFyYW1fMTQgPSBwOwoJZmxvYXQyIHBhcmFtXzE1ID0gdV9jZW50ZXJfUzFfYzA7CglmbG9hdCBwYXJhbV8xNiA9IHJhZGl1czsKCWZsb2F0IHBhcmFtXzE3ID0gMC4wNSAqIHVfbWF4X3JhZGl1c19TMV9jMDsKCWZsb2F0IHBhcmFtXzE4ID0gdV9ibHVyX1MxX2MwOwoJZmxvYXQgcmluZyA9IEZMVF9mbHV0dGVyX2xvY2FsX3NvZnRfcmluZ19TMV9jMChwYXJhbV8xNCwgcGFyYW1fMTUsIHBhcmFtXzE2LCBwYXJhbV8xNywgcGFyYW1fMTgpOwoJZmxvYXQyIHBhcmFtXzE5ID0gZGVuc2l0eV91djsKCWZsb2F0IHBhcmFtXzIwID0gdV9ub2lzZV9waGFzZV9TMV9jMDsKCWZsb2F0IHNwYXJrbGUgPSAoKEZMVF9mbHV0dGVyX2xvY2FsX3NwYXJrbGVfUzFfYzAocGFyYW1fMTksIHBhcmFtXzIwKSAqIHJpbmcpICogdHVyYnVsZW5jZSkgKiB1X3NwYXJrbGVfYWxwaGFfUzFfYzA7CglmbG9hdDIgcGFyYW1fMjEgPSBwOwoJZmxvYXQyIHBhcmFtXzIyID0gdV9jZW50ZXJfUzFfYzA7CglmbG9hdCBwYXJhbV8yMyA9IHJhZGl1czsKCWZsb2F0IHBhcmFtXzI0ID0gdV9ibHVyX1MxX2MwOwoJZmxvYXQgd2F2ZV9hbHBoYSA9IChGTFRfZmx1dHRlcl9sb2NhbF9zb2Z0X2NpcmNsZV9TMV9jMChwYXJhbV8yMSwgcGFyYW1fMjIsIHBhcmFtXzIzLCBwYXJhbV8yNCkgKiB1X2FscGhhX1MxX2MwKSAqIHVfY29sb3JfUzFfYzAudzsKCWZsb2F0NCB3YXZlX2NvbG9yID0gZmxvYXQ0KHVfY29sb3JfUzFfYzAueHl6ICogd2F2ZV9hbHBoYSwgd2F2ZV9hbHBoYSk7CglmcmFnQ29sb3JfUzFfYzAgPSBtaXgod2F2ZV9jb2xvciwgZmxvYXQ0KDEuMCksIGZsb2F0NChzcGFya2xlKSk7Cn0KaGFsZjQgcnVudGltZV9zaGFkZXJfUzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8wX2luQ29sb3IgPSBfaW5wdXQ7CglmbG9hdDIgX3RtcF8xX2Nvb3JkcyA9IHZUcmFuc2Zvcm1lZENvb3Jkc18yX1MwOwoJZmx1dHRlcl9GcmFnQ29vcmRfUzFfYzAgPSBmbG9hdDQoX3RtcF8xX2Nvb3JkcywgMC4wLCAwLjApOwoJRkxUX21haW5fUzFfYzAoKTsKCXJldHVybiBoYWxmNChoYWxmNChmcmFnQ29sb3JfUzFfYzApKTsKfQpoYWxmNCBNYXRyaXhFZmZlY3RfUzEoaGFsZjQgX2lucHV0KSAKewoJcmV0dXJuIHJ1bnRpbWVfc2hhZGVyX1MxX2MwKF9pbnB1dCk7Cn0KaGFsZjQgUmVjdF9TMl9jMChoYWxmNCBfaW5wdXQpIAp7CgloYWxmNCBfdG1wXzJfaW5Db2xvciA9IF9pbnB1dDsKCWhhbGYgY292ZXJhZ2U7CglpZiAoaW50KDEpID09IGtGaWxsQldfUzJfYzAgfHwgaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MyX2MwKSAKCXsKCQljb3ZlcmFnZSA9IGhhbGYoYWxsKGdyZWF0ZXJUaGFuKGZsb2F0NChza19GcmFnQ29vcmQueHksIHVyZWN0VW5pZm9ybV9TMl9jMC56dyksIGZsb2F0NCh1cmVjdFVuaWZvcm1fUzJfYzAueHksIHNrX0ZyYWdDb29yZC54eSkpKSk7Cgl9CgllbHNlIAoJewoJCWhhbGY0IGRpc3RzNCA9IHNhdHVyYXRlKGhhbGY0KDEuMCwgMS4wLCAtMS4wLCAtMS4wKSAqIGhhbGY0KHNrX0ZyYWdDb29yZC54eXh5IC0gdXJlY3RVbmlmb3JtX1MyX2MwKSk7CgkJaGFsZjIgZGlzdHMyID0gKGRpc3RzNC54eSArIGRpc3RzNC56dykgLSAxLjA7CgkJY292ZXJhZ2UgPSBkaXN0czIueCAqIGRpc3RzMi55OwoJfQoJaWYgKGludCgxKSA9PSBrSW52ZXJzZUZpbGxCV19TMl9jMCB8fCBpbnQoMSkgPT0ga0ludmVyc2VGaWxsQUFfUzJfYzApIAoJewoJCWNvdmVyYWdlID0gMS4wIC0gY292ZXJhZ2U7Cgl9CglyZXR1cm4gaGFsZjQoaGFsZjQoY292ZXJhZ2UpKTsKfQpoYWxmNCBDaXJjbGVfUzJfYzFfYzAoaGFsZjQgX2lucHV0KSAKewoJaGFsZjQgX3RtcF8zX2luQ29sb3IgPSBfaW5wdXQ7CgloYWxmIGQ7CglpZiAoaW50KDEpID09IGtJbnZlcnNlRmlsbEJXX1MyX2MxX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMl9jMV9jMCkgCgl7CgkJZCA9IGhhbGYoKGxlbmd0aCgodWNpcmNsZV9TMl9jMV9jMC54eSAtIHNrX0ZyYWdDb29yZC54eSkgKiB1Y2lyY2xlX1MyX2MxX2MwLncpIC0gMS4wKSAqIHVjaXJjbGVfUzJfYzFfYzAueik7Cgl9CgllbHNlIAoJewoJCWQgPSBoYWxmKCgxLjAgLSBsZW5ndGgoKHVjaXJjbGVfUzJfYzFfYzAueHkgLSBza19GcmFnQ29vcmQueHkpICogdWNpcmNsZV9TMl9jMV9jMC53KSkgKiB1Y2lyY2xlX1MyX2MxX2MwLnopOwoJfQoJcmV0dXJuIGhhbGY0KGhhbGY0KGludCgxKSA9PSBrRmlsbEFBX1MyX2MxX2MwIHx8IGludCgxKSA9PSBrSW52ZXJzZUZpbGxBQV9TMl9jMV9jMCA/IHNhdHVyYXRlKGQpIDogaGFsZihkID4gMC41KSkpOwp9CmhhbGY0IEJsZW5kX1MyX2MxKGhhbGY0IF9zcmMsIGhhbGY0IF9kc3QpIAp7CglyZXR1cm4gYmxlbmRfbW9kdWxhdGUoX3NyYywgQ2lyY2xlX1MyX2MxX2MwKF9zcmMpKTsKfQpoYWxmNCBCbGVuZF9TMihoYWxmNCBfc3JjLCBoYWxmNCBfZHN0KSAKewoJcmV0dXJuIGJsZW5kX21vZHVsYXRlKFJlY3RfUzJfYzAoX3NyYyksIEJsZW5kX1MyX2MxKF9zcmMsIF9kc3QpKTsKfQp2b2lkIG1haW4oKSAKewoJLy8gU3RhZ2UgMCwgUXVhZFBlckVkZ2VBQUdlb21ldHJ5UHJvY2Vzc29yCgloYWxmNCBvdXRwdXRDb2xvcl9TMDsKCW91dHB1dENvbG9yX1MwID0gdmNvbG9yX1MwOwoJZmxvYXQgY292ZXJhZ2UgPSB2Y292ZXJhZ2VfUzA7CgloYWxmNCBvdXRwdXRDb3ZlcmFnZV9TMCA9IGhhbGY0KGNvdmVyYWdlKTsKCWhhbGY0IG91dHB1dF9TMTsKCW91dHB1dF9TMSA9IE1hdHJpeEVmZmVjdF9TMShvdXRwdXRDb2xvcl9TMCk7CgloYWxmNCBvdXRwdXRfUzI7CglvdXRwdXRfUzIgPSBCbGVuZF9TMihvdXRwdXRDb3ZlcmFnZV9TMCwgaGFsZjQoMSkpOwoJewoJCS8vIFhmZXIgUHJvY2Vzc29yOiBQb3J0ZXIgRHVmZgoJCXNrX0ZyYWdDb2xvciA9IG91dHB1dF9TMSAqIG91dHB1dF9TMjsKCX0KfQoAAAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAHBvc2l0aW9uCAAAAGNvdmVyYWdlBQAAAGNvbG9yAAAACgAAAGxvY2FsQ29vcmQAAAAAAAA="}} \ No newline at end of file diff --git a/test_driver/driver_screenshots.dart b/test_driver/driver_screenshots.dart index bea53bbdf..2bcc263d8 100644 --- a/test_driver/driver_screenshots.dart +++ b/test_driver/driver_screenshots.dart @@ -58,6 +58,8 @@ Future configureAndLaunch() async { ..coordinateFormat = CoordinateFormat.dms ..unitSystem = UnitSystem.metric // map - ..mapStyle = EntryMapStyle.googleNormal; + ..mapStyle = EntryMapStyle.googleNormal + // debug + ..debugShowViewerTiles = false; app.main(); } diff --git a/whatsnew/whatsnew-en-US b/whatsnew/whatsnew-en-US index 3f381a910..53217c088 100644 --- a/whatsnew/whatsnew-en-US +++ b/whatsnew/whatsnew-en-US @@ -1,4 +1,4 @@ -In v1.12.8: +In v1.12.9: - play more kinds of motion photos -- enjoy the app in Galician +- enjoy the app in Galician and Kannada Full changelog available on GitHub \ No newline at end of file